From 7857a444de69124e9f7fb45f98b0ae818b107f23 Mon Sep 17 00:00:00 2001 From: zsh_root <979909237@qq.com> Date: 星期一, 06 一月 2025 14:37:01 +0800 Subject: [PATCH] 国产UWB扫描器上位机V1.1 首次提交 --- image/warn.png | 0 src/ymodem/getFilesDataBytes.java | 127 + .gitignore | 2 src/Anchor/Anchor.java | 22 src/baowen/Dell_udpReceive.java | 114 + src/tools/Judge/JugeNumber.java | 136 + src/index/JPanelMoudle/versionUpgradeComp.java | 228 +++ src/baowen/YuanshiByt.java | 73 src/tools/GetNowTime.java | 56 src/baowen/Dell_55AA03.java | 51 src/index/JPanelMoudle/readParamsComp.java | 361 ++++ src/index/JPanelMoudle/ComMoudleComp.java | 216 ++ src/tools/ShowMessage.java | 21 src/index/JPanelMoudle/showDataComp.java | 158 ++ src/baowen/Dell_55AA34.java | 60 src/ymodem/netWorkUpgradeThread.java | 201 ++ src/ymodem/YModemUpgradeThread.java | 145 + image/scan.png | 0 src/tools/Tools.java | 223 ++ src/baowen/Dell_Baowen.java | 79 + src/tools/ChuanKou/Xmodem.java | 257 +++ src/ymodem/CRC16.java | 76 + src/baowen/Dell_55AA40.java | 65 src/baowen/WriteReadAnchor.java | 137 + src/tools/ChuanKou/SerialPortUtil.java | 306 ++++ src/tools/Judge/JugeIn.java | 24 src/tools/AutoCloseDialog.java | 63 src/tools/Jiaoyan.java | 109 + src/index/GCUWBreadIndex.java | 220 ++ src/tools/ChuanKou/SerialPortManager.java | 52 src/tools/CustomProgressBar.java | 45 src/index/homeMain.java | 15 src/ymodem/ymodem.java | 10 lib/RXTXcomm.jar | 0 src/Anchor/anchor_Dell.java | 44 src/index/JPanelMoudle/anchorListComp.java | 199 ++ src/index/Timer100.java | 40 src/baowen/Dell_uanshi_byt.java | 187 ++ src/tools/ChuanKou/CRC16.java | 51 src/tools/ChuanKou/SerialPortParameter.java | 98 + src/META-INF/MANIFEST.MF | 3 src/baowen/Baowen.java | 49 src/baowen/Dell_55AA39.java | 129 + 43 files changed, 4,452 insertions(+), 0 deletions(-) diff --git a/.gitignore b/.gitignore index f112f7f..d68b9cf 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,5 @@ # Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties` # should NOT be excluded as they contain compiler settings and other important # information for Eclipse / Flash Builder. +/.idea +/out diff --git a/image/scan.png b/image/scan.png new file mode 100644 index 0000000..4aecd7b --- /dev/null +++ b/image/scan.png Binary files differ diff --git a/image/warn.png b/image/warn.png new file mode 100644 index 0000000..4eb83f9 --- /dev/null +++ b/image/warn.png Binary files differ diff --git a/lib/RXTXcomm.jar b/lib/RXTXcomm.jar new file mode 100644 index 0000000..e1e7503 --- /dev/null +++ b/lib/RXTXcomm.jar Binary files differ diff --git a/src/Anchor/Anchor.java b/src/Anchor/Anchor.java new file mode 100644 index 0000000..37b0651 --- /dev/null +++ b/src/Anchor/Anchor.java @@ -0,0 +1,22 @@ +package Anchor; + +public class Anchor { + String anchorId;//淇℃爣ID + String distance;//娴嬭窛璺濈 + + public String getAnchorId() { + return anchorId; + } + + public String getDistance() { + return distance; + } + + public void setAnchorId(String anchorId) { + this.anchorId = anchorId; + } + + public void setDistance(String distance) { + this.distance = distance; + } +} diff --git a/src/Anchor/anchor_Dell.java b/src/Anchor/anchor_Dell.java new file mode 100644 index 0000000..da1fc23 --- /dev/null +++ b/src/Anchor/anchor_Dell.java @@ -0,0 +1,44 @@ +package Anchor; + +import java.util.Vector; + +public class anchor_Dell { + static Vector<Anchor> anchors=new Vector<>(); + static int id=1001; + static int dis=1001; + + public anchor_Dell(){ + for (int i = 0; i < 50; i++) { + id++; + dis++; + addAnchor(id+"",dis+""); + } + } + + + public static Anchor findAnchor(String anchorId){ + for (Anchor anchor : anchors) { + String anchorId1 = anchor.getAnchorId(); + if (anchorId1.equals(anchorId)){ + return anchor; + } + } + return null; + } + + public static void addAnchor(String anchorId,String Distance){ + Anchor anchor = findAnchor(anchorId); + if (anchor==null){ + Anchor anchor1=new Anchor(); + anchor1.setAnchorId(anchorId); + anchor1.setDistance(Distance); + anchors.add(anchor1); + }else { + anchor.setDistance(Distance); + } + } + + public static Vector<Anchor> getAnchors() { + return anchors; + } +} diff --git a/src/META-INF/MANIFEST.MF b/src/META-INF/MANIFEST.MF new file mode 100644 index 0000000..9902dd5 --- /dev/null +++ b/src/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: index.homeMain + diff --git a/src/baowen/Baowen.java b/src/baowen/Baowen.java new file mode 100644 index 0000000..f0405a8 --- /dev/null +++ b/src/baowen/Baowen.java @@ -0,0 +1,49 @@ +package baowen; + +public class Baowen { +String hex; +String ip; +String addtime; +int port; +String dataFrom;//鏁版嵁鏉ユ簮 0:鍘熷鏁版嵁锛�1锛氭媶鍖呮暟鎹紝-1锛氭湭鐭� + + public String getDataFrom() { + return dataFrom; + } + + public void setDataFrom(String dataFrom) { + this.dataFrom = dataFrom; + } + + public int getPort() { + return port; +} +public void setPort(int port) { + this.port = port; +} +int timestamp; +public String getHex() { + return hex; +} +public String getIp() { + return ip; +} +public String getAddtime() { + return addtime; +} +public int getTimestamp() { + return timestamp; +} +public void setHex(String hex) { + this.hex = hex; +} +public void setIp(String ip) { + this.ip = ip; +} +public void setAddtime(String addtime) { + this.addtime = addtime; +} +public void setTimestamp(int timestamp) { + this.timestamp = timestamp; +} +} diff --git a/src/baowen/Dell_55AA03.java b/src/baowen/Dell_55AA03.java new file mode 100644 index 0000000..abbaa24 --- /dev/null +++ b/src/baowen/Dell_55AA03.java @@ -0,0 +1,51 @@ +package baowen; + + +import index.JPanelMoudle.versionUpgradeComp; + +import tools.Tools; + + + +public class Dell_55AA03 { + private static String[] hex = null; + + public static void dell(String ip, String message, int port) { + String infom[] = message.split("55AA"); + int size = infom.length; + for (int i = 0; i < size; i++) { + String mes = "55AA" + infom[i]; + String[] hex = Tools.hex(message); + if (hex.length < 30) { + return; + } + String type = Tools.decodeHEX(hex[20] + hex[19]) + ""; + if (type.equals("3")) { + dell05(ip, message, port); + } + } + } + + public static void dell05(String ip, String message, int port) { + String[] infoArray = message.split("55AA"); + int size = infoArray.length; + + for (int i = 0; i < size; i++) { + String hexMessage = "55AA" + infoArray[i]; + if (isValidMessage(hexMessage)) { + ok_55AA05(ip, hexMessage, port); + } + } + } + + private static boolean isValidMessage(String hexMessage) { + return hexMessage.startsWith("55AA0355") && hexMessage.length() == 178; + } + + public static void ok_55AA05(String ip, String hexMessage, int port) { + hexMessage = hexMessage.substring(14, hexMessage.length()); + hex = Tools.hex(hexMessage); + String firmwareVersion = "V" + Integer.parseInt(hex[1], 16) + "." + Integer.parseInt(hex[0], 16); + versionUpgradeComp.getReadVersion_jf().setText(firmwareVersion); + } +} \ No newline at end of file diff --git a/src/baowen/Dell_55AA34.java b/src/baowen/Dell_55AA34.java new file mode 100644 index 0000000..ddf8206 --- /dev/null +++ b/src/baowen/Dell_55AA34.java @@ -0,0 +1,60 @@ +package baowen; + + +import index.JPanelMoudle.readParamsComp; +import index.JPanelMoudle.versionUpgradeComp; + +import tools.ShowMessage; +import tools.Tools; + +import java.math.BigInteger; + + +//鏍囩蹇冭烦鍖� +public class Dell_55AA34 { + static String[] hex;//瀛楄妭鏁扮粍 + static String ip; + static int port; + +//55AA3403240000 + public static void dellrgs( String ip1,String infom, int port1) { + String jinDu="";//鍗囩骇杩涘害 + ip = ip1; + port = port1; + hex = Tools.hex(infom); + if (hex.length>3) { + int datalenth1 = Tools.decodeHEX(hex[3]);//鏁版嵁闀垮害 + datalenth1 = datalenth1 * 2 + 8; + int lenth = infom.length(); + if (lenth == datalenth1) { + int i = decodeHEX(hex[4]); + String tagid="-----"; + if (hex[3].equals("05")){ + tagid = hex[6] + hex[5]; + } + String anchorID = readParamsComp.getAnchorId_jf().getText(); + if (tagid.equals(anchorID)||tagid.equals("-----")){ + versionUpgradeComp.getUpdateAnchor_jf().setValue(i); + } + if (i==100||i==99){//璁惧鍗囩骇杩涘害杈惧埌100鎴栬��99鏃� + ShowMessage.zidingyi("淇℃爣鍗囩骇瀹屾垚"); + versionUpgradeComp.exitUpgradeXinBiao(); + } + } + } + } + + + + + /**16杩涘埗杞负10杩涘埗*/ + public static int decodeHEX(String hexs){ + BigInteger bigint=new BigInteger(hexs, 16); + int numb=bigint.intValue(); + return numb; + + } + + + +} diff --git a/src/baowen/Dell_55AA39.java b/src/baowen/Dell_55AA39.java new file mode 100644 index 0000000..159d685 --- /dev/null +++ b/src/baowen/Dell_55AA39.java @@ -0,0 +1,129 @@ +package baowen; + + +import index.JPanelMoudle.readParamsComp; +import tools.GetNowTime; +import tools.ShowMessage; +import tools.Tools; + + +/** + * 鍩虹珯鐨勯厤缃俊鎭� + */ +public class Dell_55AA39 { + public static boolean readpeizhi_succ = false; + static String[] hex = null; + static String[] hex1 = null; + + + /** + * 55 AA 39 55 03 01 50 00 01 01 90 E8 03 0A 00 05 00 E1 FF 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 71 04 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 43 00 02 00 78 00 01 00 00 00 01 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 A9 FA + */ + public static void dell(String ip, String message, int port) { + hex = Tools.hex(message);//鍘熷鏁版嵁 + int length = message.length(); + int size = Tools.decodeHEX(hex[3]); + int length2 = (size * 2) + 8; + if (length2 == length) { + ok_55AA39(ip, message, port, hex); + } else { + Dell_uanshi_byt.intsert(ip, message, GetNowTime.timestamp2(), GetNowTime.timestamp(), port); + } + + } + + + @SuppressWarnings("unused") + public static void ok_55AA39(String ip, String message, int port, String[] hex) { + String hex1 = hex[8]; + //璇诲啓鏍囩 + if (hex1.equals("02")) { + rwTag(ip, message, port,hex); + } else if (hex1.equals("12") || hex1.equals("11")) { + rwAnc(ip, message, port, hex1); + } + } + + //璇诲啓鍩虹珯閰嶇疆 + private static void rwAnc(String ip, String message, int port, String hexr0w) { + String message1 = message.substring(22); + hex1 = Tools.hex(message1);//鍘熷鏁版嵁 + String ancId = null; //鍩虹珯ID + String version = null; //鍩虹珯鐗堟湰 + String cejuNum = null; //娴嬭窛鍩虹珯鏁伴噺 + String sendTime = null; //uwb淇″彿鍙戦�佹椂闂� + String loraGongLv = null; //lora鍙戝皠鍔熺巼 + String uwbGongLv = null; //uwb鍔熺巼 + String gatewayId = null; //uwb鍔熺巼 + if (hexr0w.equals("11")){ + System.out.println("淇敼鍩虹珯鎴愬姛"); + }else { + try { + gatewayId = hex[7] + hex[6];//缃戝叧ID + version = "V" + Integer.parseInt(hex1[1], 16) + "." + Integer.parseInt(hex1[0], 16);//鐗堟湰鍙� + ancId = diZhi(2);//鍩虹珯ID + cejuNum = Tools.decodeHEX(diZhi(5)) + "";//缁処D + loraGongLv = getLoraGonglV(6);//lora鍔熺巼 + sendTime = Tools.decodeHEX(diZhi(10)) + "";//鍙戦�佹椂闂� + uwbGongLv = Tools.decodeHEX(diZhi(27)) + "";//uwb鍔熺巼 + + } catch (NumberFormatException e) { + ShowMessage.zidingyi_24("淇℃爣杩斿洖鍙傛暟閿欒"); + return; + } + } + } + + + + + //璇诲啓鏍囩鍥炲 + private static void rwTag(String ip, String message, int port,String[] hex) { + + String message1 = message.substring(22); + hex1 = Tools.hex(message1);//鍘熷鏁版嵁 + + String tagid = null;//妯″潡ID + String version = null;//鐗堟湰鍙� + String groupId = null;//灏忕粍ID + String distance = null;//lora鍔熺巼 + String uwbGongLv = null;//uw鍔熺巼 + try { + version = "V" + Integer.parseInt(hex1[1], 16) + "." + Integer.parseInt(hex1[0], 16);//鐗堟湰鍙� + tagid = diZhi(2);//鏍囩ID + groupId = Tools.decodeHEX(diZhi(5)) + "";//灏忕粍ID + distance = Tools.decodeHEX(diZhi(6))+"";//鏍″噯璺濈 + uwbGongLv = Tools.decodeHEX(diZhi(27)) + "";//UWB鍔熺巼 + readParamsComp.getAnchorId_jf().setText(tagid); + readParamsComp.getAnchorVersion_jf().setText(version); + readParamsComp.getGroupId_jf().setText(groupId); + readParamsComp.getAnchorPower_jf().setText(uwbGongLv); + readParamsComp.getJiaoZhunDis_jf().setText(distance); + } catch (NumberFormatException e) { + ShowMessage.zidingyi_24("淇℃爣鍙傛暟閿欒..."); + return; + } + + + + } + + + + + private static String getLoraGonglV(int addr) { + String loraGongl="-1"; + int loraPower = Tools.decodeHEX(diZhi(addr)); + byte loraPower1 = (byte) loraPower; + loraGongl = loraPower1 + ""; + return loraGongl; + } + + + public static String diZhi(int addr) { + String s = hex1[(addr * 2) - 1] + hex1[(addr * 2) - 2]; + return s; + } + + +} diff --git a/src/baowen/Dell_55AA40.java b/src/baowen/Dell_55AA40.java new file mode 100644 index 0000000..02b0354 --- /dev/null +++ b/src/baowen/Dell_55AA40.java @@ -0,0 +1,65 @@ +package baowen; + +import Anchor.anchor_Dell; +import tools.GetNowTime; +import tools.Tools; + +public class Dell_55AA40 { + + static String[] hex;//瀛楄妭鏁扮粍 + + static int[] distance;//鑾峰彇璺濈鐨勯泦鍚� + static String[] anchorid;//鑾峰彇鍩虹珯鐨勯泦鍚� + + public static void dellrgs(String ip,String message, int port) { + message = message.replaceAll("\r\n|\r|\n", "");//鍙栧嚭鎵�鏈夋彌琛屽拰鍥炶溅 + int lenth = message.length(); + hex = Tools.hex(message);//鍘熷鏁版嵁 + //int datalenth1 = Tools.decodeHEX(hex[3]);//鏁版嵁闀垮害 + /* datalenth1 = datalenth1 * 2 + 8; + if (lenth == datalenth1) {*/ + String baoTou = diZhi(2);//鍖呭ご + int anchorNum = Tools.decodeHEXToInt8(hex[3]); + get_anchorids(anchorNum); + get_distance_int(anchorNum); + addAnchor(anchorNum); + /* }else { + Dell_uanshi_byt.intsert(ip, message, GetNowTime.timestamp2(), GetNowTime.timestamp(), port); + }*/ + } + + + //娣诲姞鍩虹珯瀵硅薄 + private static void addAnchor(int anchorNum) { + for (int i = 0; i < anchorNum; i++) { + String anchorID = anchorid[i]; + int dis = distance[i]; + anchor_Dell.addAnchor(anchorID,dis+""); + } + } + + + //鑾峰彇鍩虹珯鐨処D闆嗗悎 + public static void get_anchorids(int anchornum) { + anchorid = new String[anchornum]; + for (int i = 0; i < anchornum; i++) { + anchorid[i] = hex[5 + i * 2] + hex[4 + i * 2]; + } + } + + + //鑾峰彇娴嬭窛璺濈 + public static void get_distance_int(int anchornum) { + int dis1 = anchornum * 2 +4 ; + int dis2 = dis1 + 1; + distance = new int[anchornum]; + for (int j = 0; j < anchornum; j++) { + distance[j] = Tools.decodeHEXToInt8( hex[dis2 + j * 2] + hex[dis1 + j * 2]); + } + } + + public static String diZhi(int addr) { + String s = hex[(addr * 2) - 1] + hex[(addr * 2) - 2]; + return s; + } +} diff --git a/src/baowen/Dell_Baowen.java b/src/baowen/Dell_Baowen.java new file mode 100644 index 0000000..a8e2b8d --- /dev/null +++ b/src/baowen/Dell_Baowen.java @@ -0,0 +1,79 @@ +package baowen; + +import tools.GetNowTime; + +import java.util.Vector; + +public class Dell_Baowen implements Runnable { + + static Thread t; + + static Vector<Baowen> baowenvec = new Vector<Baowen>(); + static int sleeptime = 1; + + public void startThread() { + t = new Thread(this); + t.start(); + } + + public static void intsert(String ip, String hex, String time, int port) { + Baowen baowen = new Baowen(); + baowen.setHex(hex); + baowen.setIp(ip); + baowen.setAddtime(time); + baowen.setTimestamp(GetNowTime.timestamp()); + baowen.setPort(port); + baowenvec.add(baowen); + } + + + public void run() { + while (true) { + try { + dellhex(); + Thread.sleep(sleeptime);//浼戠湢鏃堕棿 + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + + public void dellhex() { + int size = baowenvec.size(); + if (size == 0) { + sleeptime = 10; + return; + } + if (size > 100000) {//濡傛灉鏁版嵁澶т簬10涓囨潯娌℃湁澶勭悊鍒欐竻绌� + baowenvec.removeAllElements(); + } else { + sleeptime = 0; + Baowen baowen0 = baowenvec.get(0); + String ip = baowen0.getIp(); + int port = baowen0.getPort(); + String hex = baowen0.getHex(); + String time = baowen0.getAddtime(); + int timestamp = baowen0.getTimestamp(); + int lenth = hex.length(); + try { + dellhex2(ip, port, hex, time, timestamp, lenth);//澶勭悊鍘熷鏁版嵁 + } catch (Exception e) { + e.printStackTrace(); + } + baowenvec.remove(baowen0);//鍒犻櫎澶勭悊杩囩殑鎶ユ枃 + } + } + public static void dellhex2(String ip, int port, String hex, String time, int timestamp, int lenth) { + if (hex.startsWith("55AA39")) { + Dell_55AA39.dell(ip, hex,port); + }else if (hex.startsWith("55AA40")){ + Dell_55AA40.dellrgs(ip, hex,port); + }else if (hex.startsWith("55AA03")){ + Dell_55AA03.dell(ip, hex,port); + }else if (hex.startsWith("55AA34")){ + Dell_55AA34.dellrgs(ip, hex,port); + }else { + Dell_uanshi_byt.intsert(ip, hex, time, timestamp, port); + } + } +} diff --git a/src/baowen/Dell_uanshi_byt.java b/src/baowen/Dell_uanshi_byt.java new file mode 100644 index 0000000..a53eec5 --- /dev/null +++ b/src/baowen/Dell_uanshi_byt.java @@ -0,0 +1,187 @@ +package baowen; + + +import tools.Jiaoyan; +import tools.Judge.JugeNumber; +import tools.ShowMessage; + +import java.math.BigInteger; +import java.util.Vector; + + +/** + * 澶勭悊鍘熷鏁版嵁 + */ +public class Dell_uanshi_byt { + + static Vector<YuanshiByt> yuanshivec = new Vector<>(); + + + /** + * 鎻掑叆鍘熷娴嬭窛鏁版嵁锛屾瘡涓猧p涓�涓泦鍚堟瘡涓狪P涓婃潵鐨勬暟鎹鍏ュ悇鑷狪P涔嬩腑 + */ + public static void intsert(String ip, String hex, String time, int timestamp, int port) { + if (get_ys(ip) != null) { + int lenth = hex.length() / 2; + for (int i = 0; i < lenth; i++) { + String hex1 = hex.substring(2 * i, (i + 1) * 2); + get_ys(ip).getData().add(hex1); + hex1 = null; + } + get_ys(ip).setTime(time); + get_ys(ip).setTimestamp(timestamp); + dell_ysbyt(get_ys(ip), ip, port); + } else { + YuanshiByt ysbyt = new YuanshiByt(); + Vector<String> data1 = new Vector<>(); + StringBuffer okhex = new StringBuffer(); + ysbyt.setIp(ip); + ysbyt.setPort(port); + ysbyt.setData(data1); + ysbyt.setTimestamp(timestamp); + ysbyt.setTime(time); + ysbyt.setUsart_state(0); + ysbyt.setPack(okhex); + ysbyt.setDatalen(0); + ysbyt.setType(""); + int lenth = hex.length() / 2; + for (int i = 0; i < lenth; i++) { + String hex1 = hex.substring(2 * i, (i + 1) * 2); + data1.add(hex1); + hex1 = null; + } + yuanshivec.add(ysbyt); + dell_ysbyt(ysbyt, ip, port); + } + + } + + /** + * 閫氳繃IP鎵惧埌璇P鐨勬暟鎹泦鍚� + */ + public static YuanshiByt get_ys(String ip) { + YuanshiByt ysbyt = null; + int size = yuanshivec.size(); + for (int i = 0; i < size; i++) { + YuanshiByt ysbyt1 = yuanshivec.get(i); + String ip1 = ysbyt1.getIp(); + if (ip1.equals(ip)) { + ysbyt = ysbyt1; + break; + } + } + return ysbyt; + } + + + /** + * 澶勭悊鍘熷闆嗗悎涓殑鏁版嵁 + */ + public static void dell_ysbyt(YuanshiByt ysbyt, String ip, int port) { + String time = ysbyt.getTime(); + int timestamp = ysbyt.getTimestamp(); + while (ysbyt.getData().size() > 0) { + String hex = null; + try { + hex = ysbyt.getData().get(0); + } catch (ArrayIndexOutOfBoundsException e) { + return; + } + int usart_state = ysbyt.getUsart_state(); + //灏嗗師濮嬫暟鎹泦鍚堜腑鐨勭涓�鏉℃暟鎹彇鍑烘斁鍏wich寰幆 + switch (usart_state) { + + case 0: + //濡傛灉鏁版嵁鏄�55鍒欐墽琛� + if (hex.equals("55")) { + //灏嗘暟鎹鐞嗙殑鐘舵�佷慨鏀逛负1 + ysbyt.setUsart_state(1); + //鍚屾椂鎻掑叆鏁版嵁鍦ㄥ瓧绗︿覆涓� + ysbyt.getPack().append(hex); + } + break; + + case 1: + //濡傛灉鏁版嵁鏄疉A鍒欐墽琛� + if (hex.equals("AA")) {//鐘舵��1鎯呭喌涓嬶紝绛夊緟鎺ユ敹鍒癆A鍖呭ご2锛岀劧鍚庡彉鎴愮姸鎬�2 + ysbyt.setUsart_state(2); + ysbyt.getPack().append(hex); + } + break; + + case 2: + //鏁版嵁绫诲瀷缁橳YPE + ysbyt.setType(hex); + ysbyt.setUsart_state(3); + ysbyt.getPack().append(hex); + break; + + case 3: + //鎶ユ枃鏁版嵁娈垫暟鎹暱搴� + boolean a1 = JugeNumber.isLetterDigit(hex); + int d = 0; + if (a1) { + BigInteger bigint = new BigInteger(hex, 16); + d = bigint.intValue(); + } else { + ShowMessage.zidingyi("HEX to DEC error锛�" + hex); + ysbyt.getPack().setLength(0); + ysbyt.setType(""); + ysbyt.setUsart_state(0); + break; + } + ysbyt.getPack().append(hex); + ysbyt.setUsart_state(4); + ysbyt.setDatalen(d); + break; + + case 4: + ysbyt.getPack().append(hex); + int lenth = ysbyt.getPack().toString().length(); + int a = ysbyt.getDatalen() * 2 + 8; + if (lenth == a) { + //鏁版嵁澶勭悊鐨勭姸鎬� + ysbyt.setUsart_state(0); + //鏍¢獙 + String check = Jiaoyan.check2(ysbyt.getPack().toString()); + String panck_cmd = null; + try { + panck_cmd = ysbyt.getPack().toString().substring(lenth - 2, lenth) + ysbyt.getPack().substring(lenth - 4, lenth - 2); + } catch (Exception e) { + return; + } + + + //濡傛灉鏍¢獙鎴愬姛 + if (check.equals(panck_cmd)) { + //濡傛灉鏄祴璺濇暟鎹� + String type = ysbyt.getType(); + switch (type) { + case "39": + Dell_55AA39.dell(ip, ysbyt.getPack().toString(), port); + break; + case "40": + Dell_55AA40.dellrgs(ip, ysbyt.getPack().toString(), port); + break; + } + } + + ysbyt.getPack().setLength(0); + ysbyt.setDatalen(0); + ysbyt.setType(""); + } else if (lenth > a) { + ysbyt.getPack().setLength(0); + ysbyt.setDatalen(0); + ysbyt.setType(""); + } + + break; + + } + //鍒犻櫎澶勭悊杩囩殑鏁版嵁 + ysbyt.getData().removeElement(hex); + } + + } + +} diff --git a/src/baowen/Dell_udpReceive.java b/src/baowen/Dell_udpReceive.java new file mode 100644 index 0000000..9f71ed0 --- /dev/null +++ b/src/baowen/Dell_udpReceive.java @@ -0,0 +1,114 @@ +package baowen; + +import tools.GetNowTime; +import tools.Tools; + +import java.io.IOException; +import java.net.*; + +public class Dell_udpReceive implements Runnable{ + + int port=7000; + static DatagramSocket socket; + static int bytlenth=1024; + static DatagramPacket packet; + static boolean startFlag=false; + private static Thread receiveThread; + + public Dell_udpReceive(int port1){ + try { + startFlag=true; + port=port1; + socket = new DatagramSocket(port); + byte[] data = new byte[bytlenth]; // 鍒涘缓byte鏁扮粍 + packet= new DatagramPacket(data,bytlenth); + } catch (SocketException e) { + throw new RuntimeException(e); + } + } + + /**鍚姩绾跨▼鐨勬柟娉�*/ + public void startThread() { + receiveThread = new Thread(this); + receiveThread.start(); + } + + @Override + public void run() { + while(startFlag) { + getdata(); + } + } + + public void getdata() { + if (socket != null) { + try { + socket.receive(packet); // 鎺ユ敹鏁版嵁鍖� + delludp_receive(packet); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + public static void delludp_receive(DatagramPacket packet) { + int lenth=packet.getLength(); + byte[] byt=subBytes(packet.getData(),0, lenth); + String ip=packet.getAddress().getHostAddress();//鑾峰彇鍙戦�佺鐨処P鍦板潃瀵硅薄 + int port=packet.getPort(); + String datas = Tools.Bytes2HexString(byt);//涓插彛鏉ョ殑鏁版嵁 + Dell_Baowen.intsert(ip, datas, GetNowTime.timestamp2(), port); + } + + public static byte[] subBytes(byte[] src, int begin, int count) { + byte[] bs = new byte[count]; + System.arraycopy(src, begin, bs, 0, count); + return bs; + } + + + /**灏嗘暟鎹彂缁欏熀绔�*/ + public static void sendData(byte[] data,String ip2,int port2) { + if(socket==null) { + return; + } + String datas1=Tools.Bytes2HexString(data); + DatagramPacket packet=null; + InetAddress address=null; + //濡傛灉鏁版嵁绫诲瀷鐩稿悓 + try { + address=InetAddress.getByName(ip2); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + packet=new DatagramPacket(data, data.length, address, port2); + try { + socket.send(packet); + String datas=Tools.Bytes2HexString(data).substring(0, packet.getLength()*2); + } catch (IOException e) { + e.printStackTrace(); + } + } + + + + /** 鍋滄绾跨▼骞堕噴鏀捐祫婧� */ + public static void stop() { + + if (receiveThread != null && receiveThread.isAlive()) { + try { + receiveThread.join(); // 绛夊緟绾跨▼缁撴潫 + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + } + + public static void stopThread() { + startFlag = false;//鍋滄鏁版嵁鎺ユ敹 + if (socket != null && !socket.isClosed()) { + socket.close();//鍏抽棴socket瀵硅薄 + } + stop(); + } +} diff --git a/src/baowen/WriteReadAnchor.java b/src/baowen/WriteReadAnchor.java new file mode 100644 index 0000000..be78db8 --- /dev/null +++ b/src/baowen/WriteReadAnchor.java @@ -0,0 +1,137 @@ +package baowen; + +import gnu.io.SerialPort; +import index.JPanelMoudle.showDataComp; +import tools.ChuanKou.SerialPortUtil; +import tools.Jiaoyan; +import tools.Tools; + +public class WriteReadAnchor { + + //缁欐壂鎻忓櫒鍙戦�佹寚浠� + public static void updateLora(String zhi, + byte diZhi, + byte duxie, + String anchorID, + SerialPort serialPort, + byte lenth) { + byte[] write = write_loraAnc(diZhi,lenth ,duxie, Integer.parseInt(zhi),anchorID); + if (write == null) { + return; + } + sendData(serialPort, write); + } + + public static void sendData(SerialPort serialPort, byte[] write) { + SerialPortUtil.sendData(serialPort,write); + showDataComp.addSendAreaTextMes(write); + } + + + /**@param start 璧峰鍦板潃 + * @param lenth鏁版嵁闀垮害 + * @param value[]鍏蜂綋鐨勫��*/ + private static byte[] write_loraAnc(byte start ,byte lenth,byte duXie,int value,String id) { + byte[] buf =new byte[12+lenth]; + byte[] buf1 =new byte[8+lenth]; + //鍖呭ご + buf[0]=(byte) 0x55; + //鍖呭ご + buf[1]=(byte) 0xAA; + //鎸囦护绫诲瀷 + buf1[0]=(byte) 0x30; + //鏁版嵁闀垮害 + buf1[1]=(byte) ((byte) 8+lenth); + //璇绘ā寮� + buf1[2]=(byte) duXie; + //璧峰鍦板潃 + buf1[3]=(byte) start; + + + buf1[4]= Tools.toByteArray(id)[1]; + buf1[5]=Tools.toByteArray(id)[0]; + buf1[6]=Tools.toByteArray(id)[1]; + buf1[7]=Tools.toByteArray(id)[0]; + + buf1[8]=Tools.intToRegisters(value)[3]; + buf1[9]=Tools.intToRegisters(value)[2]; + for(int i=0;i<buf1.length;i++) { + buf[i+2]=buf1[i]; + } + //鏍¢獙鐮� + buf[buf.length-2]= Jiaoyan.check(buf1)[1]; + buf[buf.length-1]=Jiaoyan.check(buf1)[0]; + return buf; + } + + + + //璇诲彇鎵弿鍣ㄧ増鏈� + public static byte[] ReadData(byte ref, byte lenth) { + byte[] buf = new byte[10]; + byte[] buf1 = new byte[6]; + //鍖呭ご + buf[0] = (byte) 0x55; + //鍖呭ご + buf[1] = (byte) 0xAA; + + //鎸囦护绫诲瀷(鍙傛暟璇诲啓妯″紡) + buf1[0] = (byte) 0x03; + //鏁版嵁闀垮害 + buf1[1] = (byte) 0x06; + + //璇绘ā寮�(璇绘ā寮�) + buf1[2] = (byte) 0x01; + //璧峰鍦板潃 + buf1[3] = ref; + //鏁版嵁闀垮害 + buf1[4] = lenth; + + //鍥哄畾鍊�(璇绘ā寮忎笅涓�0x00) + buf1[5] = (byte) 0x00; + for (int i = 0; i < buf1.length; i++) { + buf[i + 2] = buf1[i]; + } + + //鏍¢獙鐮� + buf[8] = Jiaoyan.check(buf1)[1]; + buf[9] = Jiaoyan.check(buf1)[0]; + ; + return buf; + } + + + /**@param start 璧峰鍦板潃 + * @param lenth鏁版嵁闀垮害 + * @param value[]鍏蜂綋鐨勫��*/ + public static byte[] write_lora(byte start ,byte lenth,int value) { + byte[] buf =new byte[9+lenth]; + byte[] buf1 =new byte[5+lenth]; + //鍖呭ご + buf[0]=(byte) 0x55; + //鍖呭ご + buf[1]=(byte) 0xAA; + //鎸囦护绫诲瀷 + buf1[0]=(byte) 0x03; + //鏁版嵁闀垮害 + buf1[1]=(byte) ((byte) 5+lenth); + //璇绘ā寮� + buf1[2]=(byte) 0x02; + //璧峰鍦板潃 + buf1[3]=(byte) start; + + //璇诲啓闀垮害 + buf1[4]=(byte) lenth; + + buf1[5]=Tools.intToRegisters(value)[3]; + buf1[6]=Tools.intToRegisters(value)[2]; + for(int i=0;i<buf1.length;i++) { + buf[i+2]=buf1[i]; + } + //鏍¢獙鐮� + buf[buf.length-2]=Jiaoyan.check(buf1)[1]; + buf[buf.length-1]=Jiaoyan.check(buf1)[0]; + return buf; + + } +} diff --git a/src/baowen/YuanshiByt.java b/src/baowen/YuanshiByt.java new file mode 100644 index 0000000..478da1b --- /dev/null +++ b/src/baowen/YuanshiByt.java @@ -0,0 +1,73 @@ +package baowen; +import java.util.Vector; + +/**鍘熷鏁版嵁*/ +public class YuanshiByt { + String time; + int timestamp; + int port; + String ip; + Vector<String> data; + StringBuffer pack; + int datalen;//鏁版嵁鐨勯暱搴� + String type;//鏁版嵁绫诲瀷 + //澶勭悊鏁版嵁鍒颁粈涔堢姸鎬佷簡 + int usart_state; + + public String getIp() { + return ip; + } + public Vector<String> getData() { + return data; + } + public void setIp(String ip) { + this.ip = ip; + } + public void setData(Vector<String> data) { + this.data = data; + } + public StringBuffer getPack() { + return pack; + } + public void setPack(StringBuffer pack) { + this.pack = pack; + } + public String getTime() { + return time; + } + public int getTimestamp() { + return timestamp; + } + public void setTime(String time) { + this.time = time; + } + public void setTimestamp(int timestamp) { + this.timestamp = timestamp; + } + public int getUsart_state() { + return usart_state; + } + public void setUsart_state(int usart_state) { + this.usart_state = usart_state; + } + public int getPort() { + return port; + } + public void setPort(int port) { + this.port = port; + } + public int getDatalen() { + return datalen; + } + public void setDatalen(int datalen) { + this.datalen = datalen; + } + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + + +} diff --git a/src/index/GCUWBreadIndex.java b/src/index/GCUWBreadIndex.java new file mode 100644 index 0000000..f27f130 --- /dev/null +++ b/src/index/GCUWBreadIndex.java @@ -0,0 +1,220 @@ +package index; + +import index.JPanelMoudle.*; + +import java.awt.*; +import javax.swing.*; + + +/** + * @author zsh + */ +public class GCUWBreadIndex extends JFrame { + static ImageIcon icon = new ImageIcon("image/scan.png"); // 璇锋浛鎹负浣犲浘鏍囩殑璺緞 + public GCUWBreadIndex() { + // 鑾峰彇灞忓箷鐨勫垎杈ㄧ巼 + GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); + GraphicsDevice gd = ge.getDefaultScreenDevice(); + Rectangle screenBounds = gd.getDefaultConfiguration().getBounds(); + int screenWidth = screenBounds.width; + int screenHeight = screenBounds.height; + + // 鏍规嵁灞忓箷灏哄璋冩暣绐楀彛澶у皬 + setSize(screenWidth / 2, screenHeight / 2); // 璁剧疆绐楀彛涓哄睆骞曞昂瀵哥殑涓�鍗� + setLocationRelativeTo(null); // 灞呬腑鏄剧ず绐楀彛 + + // 绐楀彛灞炴�� + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + setTitle("GC UWB淇℃爣鎵弿杞欢V1.2"); + setIconImage(icon.getImage()); + initComponents(); + } + + private void initComponents() { + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Exception e) { + e.printStackTrace(); + } + Container contentPane = getPane(); + anchor_TableList(contentPane); + readComList(contentPane); + readWriteAnchorParams(contentPane); + DataShow(contentPane); + versionUpgrade(contentPane); + pack(); + setLocationRelativeTo(getOwner()); + } + + + //閫夋嫨涓插彛鐣岄潰 + private void readComList(Container contentPane) { + ComMoudleComp.getCom_jp().setLayout(new GridBagLayout()); + int[] columnWidths = {110, 110, 220}; + int[] rowHeights = {46, 46, 0, 46}; + double[] columnWeights = {1.0, 1.0, 1.0}; + double[] rowWeights = {1.0, 1.0, 1.0, 1.0}; + //璁剧疆甯冨眬鍣ㄧ殑鍙傛暟 + setGridBagLayoutParams(ComMoudleComp.getCom_jp(), columnWidths, rowHeights, columnWeights, rowWeights); + // 娣诲姞缁勪欢 + addLabelAndField(ComMoudleComp.getCom_jp(), ComMoudleComp.getChuanKou_jl(), ComMoudleComp.getChuanKou_jcom(), 0, 0,2); + addLabelAndField(ComMoudleComp.getCom_jp(), ComMoudleComp.getBotelv_jl(), ComMoudleComp.getBoteLV_jcm(), 0, 1,2); + // 娣诲姞鎸夐挳 + addButton(ComMoudleComp.getCom_jp(), ComMoudleComp.getOpen(), 0, 3, 2, 1); + addButton(ComMoudleComp.getCom_jp(), ComMoudleComp.getClose(), 2, 3, 1, 1); + // 鏈�鍚庡皢瀹瑰櫒娣诲姞鍒� contentPane + contentPane.add(ComMoudleComp.getCom_jp(), + new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, + GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(0, 0, 5, 5), 0, 0)); + } + + //淇℃爣鍒楄〃妯″潡 + private void anchor_TableList(Container contentPane) { + anchorListComp.getAncList_jp().setLayout(new GridBagLayout()); + int[] columnWidths = {449, 0}; + int[] rowHeights = {480, 50, 0}; + double[] columnWeights = {1.0, 1.0E-4}; + double[] rowWeights = {1.0, 0.0, 1.0E-4}; + // 璁剧疆 GridBagLayout 閰嶇疆 + setGridBagLayoutParams(anchorListComp.getAncList_jp(), columnWidths, rowHeights, columnWeights, rowWeights); + // 娣诲姞缁勪欢 + addScrollPane(anchorListComp.getAncList_jp(), anchorListComp.getScrollPane1(), anchorListComp.getAncTable(), 0, 0, 1, 1); + addButton(anchorListComp.getAncList_jp(), anchorListComp.getSelect_anc(), 0, 1, 1, 1); + + // 鏈�鍚庡皢瀹瑰櫒娣诲姞鍒� contentPane + contentPane.add(anchorListComp.getAncList_jp(), + new GridBagConstraints(0, 1, 1, 2, 0.0, 0.0, + GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(0, 0, 0, 5), 0, 0)); + } + + //鍥轰欢鍗囩骇鐣岄潰 + private void versionUpgrade(Container contentPane) { + versionUpgradeComp.getVersionUpdate().setLayout(new GridBagLayout()); + int[] columnWidths = {143, 350, 0}; + int[] rowHeights = {38, 54, 50, 58, 54, 0}; + double[] columnWeights = {1.0, 1.0, 1.0}; + double[] rowWeights = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0}; + // 璁剧疆 GridBagLayout 閰嶇疆 + setGridBagLayoutParams(versionUpgradeComp.getVersionUpdate(), columnWidths, rowHeights, columnWeights, rowWeights); + addLabelAndField(versionUpgradeComp.getVersionUpdate(), versionUpgradeComp.getLabel9(), versionUpgradeComp.getLabel9(), 0, 0,2); + addLabelAndField(versionUpgradeComp.getVersionUpdate(), versionUpgradeComp.getReadVersion_jb(), versionUpgradeComp.getReadVersion_jf(), 0, 1,2); + addLabelAndField(versionUpgradeComp.getVersionUpdate(), versionUpgradeComp.getChooseVersion(), versionUpgradeComp.getChooseVersion_jf(), 0, 2,2); + addLabelAndField(versionUpgradeComp.getVersionUpdate(), versionUpgradeComp.getWrite_saoMiao(), versionUpgradeComp.getJindu_SaoMiaoQi(), 0, 3,2); + addLabelAndField(versionUpgradeComp.getVersionUpdate(), versionUpgradeComp.getUpdateAnchor_jb(), versionUpgradeComp.getUpdateAnchor_jf(), 0, 4,2); + // 娣诲姞鍒� contentPane + contentPane.add(versionUpgradeComp.getVersionUpdate(), new GridBagConstraints(1, 2, 1, 1, 0.0, 0.0, + GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(0, 0, 0, 5), 0, 0)); + } + + + //璇诲啓鍙傛暟妯″潡 + private void readWriteAnchorParams(Container contentPane) { + readParamsComp.getReadAncParam_jp().setLayout(new GridBagLayout()); + int[] columnWidths = {139, 124*2,30, 160, 0};//姣忓垪鐨勫搴� + int[] rowHeights = {50, 50, 50, 50, 50, 50, 50, 50, 50, 0};//姣忚鐨勯珮搴� + double[] columnWeights = {1.0, 1.0, 1.0,1.0, 0}; + double[] rowWeights = {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0}; + // 璁剧疆 GridBagLayout 閰嶇疆 + setGridBagLayoutParams(readParamsComp.getReadAncParam_jp(), columnWidths, rowHeights, columnWeights, rowWeights); + // 娣诲姞缁勪欢 + addLabelAndField(readParamsComp.getReadAncParam_jp(), readParamsComp.getAnchorId(), readParamsComp.getAnchorId_jf(), 0, 1,3); + addLabelAndField(readParamsComp.getReadAncParam_jp(), readParamsComp.getAnchorVersion(), readParamsComp.getAnchorVersion_jf(), 0, 2,3); + addLabelAndFieldAndButton(readParamsComp.getReadAncParam_jp(), readParamsComp.getGroupId(), readParamsComp.getGroupId_jf(), readParamsComp.getSaveParam_GroupID(),0, 3); + addLabelAndFieldAndButton(readParamsComp.getReadAncParam_jp(), readParamsComp.getAnchorPower(), readParamsComp.getAnchorPower_jf(), readParamsComp.getSaveParam_anchorPower(),0, 4); + addLabelAndFieldAndButton(readParamsComp.getReadAncParam_jp(), readParamsComp.getJiaoZhunDis(), readParamsComp.getJiaoZhunDis_jf(), readParamsComp.getSaveParam_jiaoZhunDis(),0, 5); + addLabelAndFieldAndButton(readParamsComp.getReadAncParam_jp(), readParamsComp.getLabel6(), readParamsComp.getTextField6(), readParamsComp.getSaveParam_label6(),0, 6); + addLabelAndFieldAndButton(readParamsComp.getReadAncParam_jp(), readParamsComp.getLabel7(), readParamsComp.getTextField7(),readParamsComp.getSaveParam_label7(), 0, 7); + addLabelAndFieldAndButton(readParamsComp.getReadAncParam_jp(), readParamsComp.getLabel8(), readParamsComp.getTextField8(), readParamsComp.getSaveParam_label8(),0, 8); + // 娣诲姞鎸夐挳 + addButton(readParamsComp.getReadAncParam_jp(), readParamsComp.getReadParam(), 0, 0, 4, 1); + + // 鏈�鍚庡皢瀹瑰櫒娣诲姞鍒� contentPane + contentPane.add(readParamsComp.getReadAncParam_jp(), + new GridBagConstraints(1, 0, 1, 2, 0.0, 0.0, + GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(0, 0, 5, 5), 0, 0)); + } + + + //鏁版嵁鎺ユ敹瑙f瀽妯″潡 + private void DataShow(Container contentPane) { + showDataComp.getDataShow().setViewportView(showDataComp.getTextArea1()); + contentPane.add(showDataComp.getDataShow(), + new GridBagConstraints(2, 0, 1, 3, 0.0, 0.0, + GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(0, 0, 0, 0), 0, 0)); + } + + // 绠�鍖栫殑鏍囩鍜岃緭鍏ユ娣诲姞鏂规硶 + private void addLabelAndField(Container panel, JComponent label, JComponent textField, int gridx, int gridy,int width) { + panel.add(label, new GridBagConstraints(gridx, gridy, 1, 1, 0.0, 0.0, + GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(0, 0, 5, 5), 0, 0)); + panel.add(textField, new GridBagConstraints(gridx + 1, gridy, width,1, 0.0, 0.0, + GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(0, 0, 5, 0), 0, 0)); + } + + // 绠�鍖栫殑鏍囩鍜岃緭鍏� 鎸夐挳娣诲姞鏂规硶 + private void addLabelAndFieldAndButton(Container panel, JComponent label, JComponent textField, JComponent button,int gridx, int gridy) { + panel.add(label, new GridBagConstraints(gridx, gridy, 1, 1, 0.0, 0.0, + GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(0, 0, 5, 5), 0, 0)); + + panel.add(textField, new GridBagConstraints(gridx + 1, gridy, 1, 1, 0.0, 0.0, + GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(0, 0, 5, 0), 0, 0)); + + panel.add(button, new GridBagConstraints(gridx + 3, gridy, 1, 1, 0.0, 0.0, + GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(0, 0, 5, 0), 0, 0)); + } + + // 绠�鍖栫殑鎸夐挳娣诲姞鏂规硶 + private void addButton(Container panel, JButton button, int gridx, int gridy, int gridwidth, int gridheight) { + panel.add(button, new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 0.0, 0.0, + GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(0, 0, 5, 0), 0, 0)); + } + + // 娣诲姞 JScrollPane 鐨勬柟娉� + private void addScrollPane(Container panel, JScrollPane scrollPane, JTable table, int gridx, int gridy, int gridwidth, int gridheight) { + scrollPane.setViewportView(table); + panel.add(scrollPane, new GridBagConstraints(gridx, gridy, gridwidth, gridheight, 0.0, 0.0, + GridBagConstraints.CENTER, GridBagConstraints.BOTH, + new Insets(0, 0, 5, 0), 0, 0)); + } + + //鍏ㄥ眬椤甸潰 + private Container getPane() { + Container contentPane = getContentPane(); + contentPane.setLayout(new GridBagLayout()); + // 璁剧疆閫傚簲绐楀彛澶у皬鐨勫竷灞� + ((GridBagLayout) contentPane.getLayout()).columnWidths = new int[]{0, 504, 374, 0}; // 鍙互璋冩暣瀹藉害 + ((GridBagLayout) contentPane.getLayout()).rowHeights = new int[]{170, 268, 315, 0}; // 鍙互璋冩暣楂樺害 + // 璁剧疆浼哥缉鏉冮噸锛岀‘淇濆唴瀹瑰湪绐楀彛鏀惧ぇ鏃惰嚜閫傚簲 + ((GridBagLayout) contentPane.getLayout()).columnWeights = new double[]{1.0, 1.0, 1.0, 1.0E-4}; + ((GridBagLayout) contentPane.getLayout()).rowWeights = new double[]{1.0, 1.0, 1.0, 1.0E-4}; + return contentPane; + } + + private void setGridBagLayoutParams(JPanel jPanel, int[] columnWidths, int[] rowHeights, double[] columnWeights, double[] rowWeights) { + GridBagLayout layout = (GridBagLayout) jPanel.getLayout(); + layout.columnWidths = columnWidths; + layout.rowHeights = rowHeights; + layout.columnWeights = columnWeights; + layout.rowWeights = rowWeights; + } + + public static void startFrame(){ + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + new GCUWBreadIndex().setVisible(true); + } + }); + } +} diff --git a/src/index/JPanelMoudle/ComMoudleComp.java b/src/index/JPanelMoudle/ComMoudleComp.java new file mode 100644 index 0000000..9e5db27 --- /dev/null +++ b/src/index/JPanelMoudle/ComMoudleComp.java @@ -0,0 +1,216 @@ +package index.JPanelMoudle; + +import Anchor.anchor_Dell; +import baowen.Dell_Baowen; +import gnu.io.SerialPort; +import gnu.io.SerialPortEvent; +import tools.ChuanKou.SerialPortManager; +import tools.ChuanKou.SerialPortUtil; +import tools.GetNowTime; +import tools.ShowMessage; +import tools.Tools; + +import javax.swing.*; +import javax.swing.border.TitledBorder; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.util.TooManyListenersException; + +public class ComMoudleComp { + + + private static JPanel com_jp;//閫夋嫨涓插彛妯℃澘 + + private static JLabel chuanKou_jl;//涓插彛鍙锋爣绛� + private static JLabel botelv_jl;//娉㈢壒鐜囨爣绛� + private static JComboBox chuanKou_jcom;//涓插彛鍙蜂笅鎷夋 + private static JComboBox boteLV_jcm;//娉㈢壒鐜囦笅鎷夋 + private static JButton open;//鎵撳紑涓插彛鎸夐挳 + private static JButton close;//鍏抽棴涓插彛鎸夐挳 + static String[] coms = null; + static String com = null;//閫変腑鐨勪覆鍙� + static boolean chuankou = false;//涓插彛鏄惁琚墦寮� + static SerialPort serialPort = null;//涓插彛瀵硅薄 + + // 鑾峰彇閫夋嫨涓插彛闈㈡澘锛岃嫢涓虹┖鍒欏垱寤� + public static JPanel getCom_jp() { + if (com_jp == null) { + com_jp = new JPanel(); // 鍒濆鍖栬闈㈡澘 + com_jp.setBorder(new TitledBorder("閫夋嫨涓插彛")); + } + return com_jp; + } + + // 鑾峰彇 涓插彛鍙锋爣绛撅紝鑻ヤ负绌哄垯鍒涘缓 + public static JLabel getChuanKou_jl() { + if (chuanKou_jl == null) { + chuanKou_jl = new JLabel(" 涓插彛鍙凤細"); // 鍒濆鍖栬鏍囩 + } + return chuanKou_jl; + } + + // 鑾峰彇娉㈢壒鐜囨爣绛撅紝鑻ヤ负绌哄垯鍒涘缓 + public static JLabel getBotelv_jl() { + if (botelv_jl == null) { + botelv_jl = new JLabel(" 娉㈢壒鐜囷細"); // 鍒濆鍖栬鏍囩 + } + return botelv_jl; + } + + // 鑾峰彇 涓插彛鍙蜂笅鎷夋锛岃嫢涓虹┖鍒欏垱寤� + public static JComboBox getChuanKou_jcom() { + if (chuanKou_jcom == null) { + chuanKou_jcom = new JComboBox(); // 鍒濆鍖栬涓嬫媺妗� + chuanKou_jcom.addFocusListener(new FocusListener() { + @Override + public void focusGained(FocusEvent e) { + int comnum = SerialPortManager.get_all_port().size(); + if (coms.length != comnum) { + coms = new String[SerialPortManager.get_all_port().size()]; + for (int i = 0; i < SerialPortManager.get_all_port().size(); i++) { + coms[i] = SerialPortManager.get_all_port().get(i); + } + ComboBoxModel<String> coModel = new DefaultComboBoxModel<>(coms);//涓嬫媺鍒楄〃妯″瀷 + chuanKou_jcom.setModel(coModel); + } + } + + @Override + public void focusLost(FocusEvent e) { + + } + }); + if (SerialPortManager.get_all_port().size() != 0) { + coms = new String[SerialPortManager.get_all_port().size()]; + for (int i = 0; i < SerialPortManager.get_all_port().size(); i++) { + coms[i] = SerialPortManager.get_all_port().get(i); + } + } else { + coms = new String[1]; + coms[0] = "鏈瘑鍒埌com鍙�"; + } + ComboBoxModel<String> coModel = new DefaultComboBoxModel<>(coms);//涓嬫媺鍒楄〃妯″瀷 + chuanKou_jcom.setModel(coModel); + } + return chuanKou_jcom; + } + + + // 鑾峰彇娉㈢壒鐜囦笅鎷夋锛岃嫢涓虹┖鍒欏垱寤� + public static JComboBox getBoteLV_jcm() { + if (boteLV_jcm == null) { + String[] com = {"115200", "921600", "19200", "9600"}; + boteLV_jcm = new JComboBox(com); // 鍒濆鍖栬涓嬫媺妗� + } + return boteLV_jcm; + } + + + // 鑾峰彇 鎵撳紑涓插彛 鎸夐挳锛岃嫢涓虹┖鍒欏垱寤� + public static JButton getOpen() { + if (open == null) { + open = new JButton("鎵撳紑涓插彛"); // 鍒濆鍖栬鎸夐挳 + open.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + com = (String) chuanKou_jcom.getSelectedItem(); + if (com == null || com.equals("鏈瘑鍒埌com鍙�")) { + ShowMessage.zidingyi("鏈瘑鍒埌com鍙�,璇锋彃鍏ラ厤缃嚎骞堕噸鍚蒋浠�"); + comshuaxin(); + return; + } + int bote = Integer.parseInt((String) boteLV_jcm.getSelectedItem()); + if (!chuankou) { + serialPort = SerialPortManager.open_chuankou(com, bote); + if (serialPort == null) { + return; + } + chuankou = true;//涓插彛琚墦寮� + open.setEnabled(false); + close.setEnabled(true); + try { + SerialPortUtil.setListenerToSerialPort(serialPort, event -> { + + //鏁版嵁閫氱煡 + if (event.getEventType() == SerialPortEvent.DATA_AVAILABLE) { + if (!versionUpgradeComp.isWrite()) { + byte[] bytes = SerialPortUtil.readData(serialPort); + if (bytes == null) { + return; + } + + showDataComp.addAreaTextMes(bytes,"127.0.0.1",8888); + } + } + }); + + + } catch (TooManyListenersException e1) { + // TODO 鑷姩鐢熸垚鐨� catch 鍧� + e1.printStackTrace(); + } + } else { + ShowMessage.zidingyi("璇峰厛鍏抽棴宸叉墦寮�鐨勪覆鍙�"); + } + } + }); + } + return open; + } + + // 鑾峰彇 鍏抽棴涓插彛 鎸夐挳锛岃嫢涓虹┖鍒欏垱寤� + public static JButton getClose() { + if (close == null) { + close = new JButton("鍏抽棴涓插彛"); // 鍒濆鍖栬鎸夐挳 + close.setEnabled(false); + close.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + try { + if (chuankou) { + SerialPortUtil.closeSerialPort(serialPort); + open.setEnabled(true); + close.setEnabled(false); + chuankou = false; + anchor_Dell.getAnchors().removeAllElements();//娓呯┖淇℃爣鍩虹珯鐨勯泦鍚� + anchorListComp.updateTable();//娓呯┖淇℃爣鍒楄〃 + } else { + ShowMessage.zidingyi("涓插彛鏈墦寮�"); + } + } catch (Exception ex) { + throw new RuntimeException(ex); + } + } + }); + } + return close; + } + + + //閲嶆柊鍒锋柊涓插彛 + public static void comshuaxin() { + int comnum = SerialPortManager.get_all_port().size(); + if (comnum != 0) { + coms = new String[SerialPortManager.get_all_port().size()]; + for (int i = 0; i < SerialPortManager.get_all_port().size(); i++) { + coms[i] = SerialPortManager.get_all_port().get(i); + } + } else { + coms = new String[1]; + coms[0] = "鏈瘑鍒埌com鍙�"; + } + ComboBoxModel<String> coModel = new DefaultComboBoxModel<>(coms);//涓嬫媺鍒楄〃妯″瀷 + chuanKou_jcom.setModel(coModel); + chuanKou_jcom.repaint(); + } + + public static SerialPort getSerialPort() { + return serialPort; + } + + public static boolean isChuankou() { + return chuankou; + } +} diff --git a/src/index/JPanelMoudle/anchorListComp.java b/src/index/JPanelMoudle/anchorListComp.java new file mode 100644 index 0000000..12b1d68 --- /dev/null +++ b/src/index/JPanelMoudle/anchorListComp.java @@ -0,0 +1,199 @@ +package index.JPanelMoudle; + + +import Anchor.Anchor; +import Anchor.anchor_Dell; +import tools.ShowMessage; + +import javax.swing.*; +import javax.swing.border.TitledBorder; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.TableCellRenderer; + +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import java.util.Vector; + +public class anchorListComp { + private static JPanel ancList_jp;//鍩虹珯鍒楄〃闈㈡澘 + + private static JTable ancTable;//鍩虹珯鍒楄〃 + private static DefaultTableModel model;//琛ㄦ牸妯″瀷 + private static JButton select_anc;//鎵弿淇℃爣鎸夐挳 + private static JScrollPane scrollPane1;//瑙f瀽鏁版嵁婊氬姩闈㈡澘 + + private static Vector<Vector<String>> rowData = null; + private static Set<Anchor> existingIds = new HashSet<>(); + ; + + // 鑾峰彇 ancList_jp 闈㈡澘锛岃嫢涓虹┖鍒欏垱寤� + public static JPanel getAncList_jp() { + if (ancList_jp == null) { + ancList_jp = new JPanel(); // 鍒濆鍖栬闈㈡澘 + ancList_jp.setBorder(new TitledBorder("淇℃爣鍒楄〃")); + } + return ancList_jp; + } + + public static JTable getAncTable() { + if (ancTable == null) { + String[] columnNames = {"璁惧ID", "娴嬭窛璺濈(cm)"}; // 琛ㄦ牸鍒楀悕 + Vector<String> columnName = new Vector<>(); + for (int i = 0; i < columnNames.length; i++) { + columnName.add(columnNames[i]); + } + + // 琛ㄦ牸鍒濆鍖� + ancTable = new JTable(rowData, columnName) { + private static final long serialVersionUID = 1L; + + // 绂佹缂栬緫 + public boolean isCellEditable(int row, int column) { + return false; + } + + // 閲嶅啓 prepareRenderer 瀹炵幇闅旇鍙樿壊 + @Override + public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { + Component c = super.prepareRenderer(renderer, row, column); + + // 璁剧疆闅旇鍙樿壊锛氬伓鏁拌涓虹櫧鑹诧紝濂囨暟琛屼负鐏拌壊 + if (!isRowSelected(row)) { + if (row % 2 == 0) { + c.setBackground(new Color(240, 240, 240)); // 鍋舵暟琛岀伆鑹� + } else { + c.setBackground(Color.white); // 濂囨暟琛岀櫧鑹� + } + } + return c; + } + }; + ancTable.setColumnSelectionAllowed(false); + ancTable.getTableHeader().setReorderingAllowed(false); + // 璁剧疆琛ㄦ牸鏍峰紡 + setShowStyle(); + // 璁剧疆鍒楀ご鏍峰紡 + ancTable.getTableHeader().setPreferredSize(new Dimension(ancTable.getTableHeader().getPreferredSize().width, 40)); + DefaultTableCellRenderer headerRenderer = new DefaultTableCellRenderer(); + headerRenderer.setHorizontalAlignment(SwingConstants.CENTER); // 鍒楀ご鏂囧瓧灞呬腑 + for (int i = 0; i < ancTable.getColumnCount(); i++) { + ancTable.getColumnModel().getColumn(i).setHeaderRenderer(headerRenderer); + } + // 璁剧疆琛岄珮 + ancTable.setRowHeight(35); // 璁剧疆姣忚鐨勯珮搴︿负35鍍忕礌 + // 鑾峰彇琛ㄦ牸妯″瀷骞跺姞杞芥暟鎹� + model = (DefaultTableModel) ancTable.getModel(); + getRowData(anchor_Dell.getAnchors()); + ancTable.revalidate(); + ancTable.repaint(); + } + return ancTable; + } + + + public static void getRowData(Vector<Anchor> s2_vector) { + // 閬嶅巻鏂版暟鎹� + for (Anchor s2 : s2_vector) { + String anchorId = s2.getAnchorId().trim(); + String newDistance = s2.getDistance().trim(); + + boolean found = false; + + // 閬嶅巻鐜版湁妯″瀷锛屽垽鏂槸鍚﹀瓨鍦ㄧ浉鍚岀殑 AnchorId + for (int i = 0; i < model.getRowCount(); i++) { + String existingId = ((String) model.getValueAt(i, 0)).trim(); + String existingDistance = ((String) model.getValueAt(i, 1)).trim(); + if (existingId.equals(anchorId)) { + found = true; + // 濡傛灉璺濈涓嶅悓锛屾洿鏂版ā鍨� + if (!existingDistance.equals(newDistance)) { + model.setValueAt(newDistance, i, 1); // 鏇存柊璺濈 + } + break; + } + } + // 濡傛灉娌℃湁鎵惧埌锛屾坊鍔犳柊琛� + if (!found) { + Vector<String> row = new Vector<>(); + row.add(anchorId); + row.add(newDistance); + model.addRow(row); + } + } + } + + // 鑾峰彇 select_anc 鎸夐挳锛岃嫢涓虹┖鍒欏垱寤� + public static JButton getSelect_anc() { + if (select_anc == null) { + select_anc = new JButton("鎵弿淇℃爣"); // 鍒濆鍖栬鎸夐挳 + select_anc.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (ComMoudleComp.isChuankou()) { + updateTable(); + ShowMessage.zidingyi("姝e湪閲嶆柊鎵弿淇℃爣"); + } else { + ShowMessage.zidingyi("璇峰厛鎵撳紑涓插彛"); + } + } + }); + } + return select_anc; + } + + // 鑾峰彇 瑙f瀽鏁版嵁婊氬姩闈㈡澘锛岃嫢涓虹┖鍒欏垱寤� + public static JScrollPane getScrollPane1() { + if (scrollPane1 == null) { + scrollPane1 = new JScrollPane(); // 鍒濆鍖栬婊氬姩闈㈡澘 + } + return scrollPane1; + } + + + //璁剧疆琛ㄦ牸鏄剧ず椋庢牸 + private static void setShowStyle() { + // 鑾峰彇琛ㄦ牸鐨勫垪鏁� + int columnCount = ancTable.getColumnCount(); + // 鍒涘缓涓�涓粯璁ょ殑鍗曞厓鏍兼覆鏌撳櫒锛岀敤浜庡眳涓樉绀� + DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(); + renderer.setHorizontalAlignment(SwingConstants.CENTER); + // 涓烘瘡涓�鍒楄缃娓叉煋鍣� + for (int i = 0; i < columnCount; i++) { + ancTable.getColumnModel().getColumn(i).setCellRenderer(renderer); + } + // 涓哄垪澶磋缃眳涓覆鏌撳櫒 + DefaultTableCellRenderer headerRenderer = new DefaultTableCellRenderer(); + headerRenderer.setHorizontalAlignment(SwingConstants.CENTER); + for (int i = 0; i < columnCount; i++) { + // 璁剧疆鍒楀ご鐨勬覆鏌撳櫒 + ancTable.getTableHeader().getColumnModel().getColumn(i).setHeaderRenderer(headerRenderer); + } + } + + + //鍒锋柊琛ㄦ牸鐨勬柟娉� + public static void updateTable() { + if (model != null) { + // 娓呯┖鎵�鏈夎 + existingIds.clear(); + model.setRowCount(0); + anchor_Dell.getAnchors().removeAllElements();//鍒犻櫎鎵�鏈変俊鏍� + getRowData(anchor_Dell.getAnchors()); + scrollPane1.validate(); + } + } + + public static String getChooseAnchorId() { + String anchorID = null; + int selectedRow = anchorListComp.getAncTable().getSelectedRow(); + if (selectedRow != -1) { + anchorID = (String) anchorListComp.getAncTable().getValueAt(selectedRow, 0); + } + return anchorID; + } +} diff --git a/src/index/JPanelMoudle/readParamsComp.java b/src/index/JPanelMoudle/readParamsComp.java new file mode 100644 index 0000000..c4a0f42 --- /dev/null +++ b/src/index/JPanelMoudle/readParamsComp.java @@ -0,0 +1,361 @@ +package index.JPanelMoudle; + +import baowen.WriteReadAnchor; +import tools.Judge.JugeIn; +import tools.ShowMessage; + +import javax.swing.*; +import javax.swing.border.TitledBorder; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +public class readParamsComp { + + private static JPanel readAncParam_jp;//璇诲彇淇℃爣閰嶇疆闈㈡澘 + private static JButton readParam;//璇诲彇鍙傛暟鎸夐挳 + private static JLabel anchorId;//鍩虹珯ID + private static JLabel anchorVersion;//淇℃爣鐗堟湰鍙� + private static JLabel groupId;//閫氳灏忕粍 + private static JLabel anchorPower;//淇℃爣鍔熺巼 + private static JLabel jiaoZhunDis;//鏍″噯璺濈 + private static JLabel label6;//淇濈暀鍙傛暟1 + private static JLabel label7;//淇濈暀鍙傛暟2 + private static JLabel label8;//淇濈暀鍙傛暟3 + private static JTextField anchorId_jf; + private static JTextField anchorVersion_jf; + private static JTextField groupId_jf; + private static JTextField anchorPower_jf; + private static JTextField jiaoZhunDis_jf; + private static JTextField textField6; + private static JTextField textField7; + private static JTextField textField8; + + + private static JButton saveParam_groupId; + private static JButton saveParam_anchorPower; + private static JButton saveParam_jiaoZhunDis; + private static JButton saveParam_label6; + private static JButton saveParam_label7; + private static JButton saveParam_label8; + + + // 鑾峰彇 readAncParam_jp 闈㈡澘锛岃嫢涓虹┖鍒欏垱寤� + public static JPanel getReadAncParam_jp() { + if (readAncParam_jp == null) { + readAncParam_jp = new JPanel(); // 鍒濆鍖栬闈㈡澘 + readAncParam_jp.setBorder(new TitledBorder("璇诲啓淇℃爣鍙傛暟")); + } + return readAncParam_jp; + } + + + // 鑾峰彇 readParam 鎸夐挳锛岃嫢涓虹┖鍒欏垱寤� + public static JButton getReadParam() { + if (readParam == null) { + readParam = new JButton("璇诲彇鍙傛暟"); // 鍒濆鍖栬鎸夐挳 + readParam.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (!ComMoudleComp.isChuankou()) { + ShowMessage.zidingyi("璇峰厛鎵撳紑涓插彛"); + return; + } + String chooseAnchorId = anchorListComp.getChooseAnchorId(); + if (chooseAnchorId != null) { + WriteReadAnchor.updateLora("0", (byte) 0x00, (byte) 0x02, chooseAnchorId, ComMoudleComp.getSerialPort(),(byte) 0x02); + ShowMessage.zidingyi(chooseAnchorId + ":璇诲彇鎸囦护宸插彂閫�"); + } else { + ShowMessage.zidingyi("璇峰湪淇℃爣鍒楄〃涓�変腑闇�瑕佽鍙栫殑璁惧"); + } + } + }); + + + } + return readParam; + } + + // 鑾峰彇 saveParam 鎸夐挳锛岃嫢涓虹┖鍒欏垱寤� + public static JButton getSaveParam_GroupID() { + if (saveParam_groupId == null) { + saveParam_groupId = new JButton("淇濆瓨閫氳灏忕粍"); // 鍒濆鍖栬鎸夐挳 + saveParam_groupId.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (!ComMoudleComp.isChuankou()) { + ShowMessage.zidingyi("璇峰厛鎵撳紑涓插彛"); + return; + } + if (getAnchorId_jf().getText().length()!=4){ + ShowMessage.zidingyi("淇℃爣ID涓嶆纭�"); + return; + } + String ancID = getAnchorId_jf().getText();//鍩虹珯ID + String zuId = getGroupId_jf().getText();//閫氳灏忕粍 + boolean groudID = JugeIn.shuru("閫氳灏忕粍", zuId); + if (groudID){ + WriteReadAnchor.updateLora(zuId, (byte) 0x0A, (byte) 0x01, ancID, ComMoudleComp.getSerialPort(),(byte) 0x02); + } + } + }); + } + return saveParam_groupId; + } + + // 鑾峰彇 saveParam 鎸夐挳锛岃嫢涓虹┖鍒欏垱寤� + public static JButton getSaveParam_anchorPower() { + if (saveParam_anchorPower == null) { + saveParam_anchorPower = new JButton("淇濆瓨淇℃爣鍔熺巼"); // 鍒濆鍖栬鎸夐挳 + saveParam_anchorPower.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (!ComMoudleComp.isChuankou()) { + ShowMessage.zidingyi("璇峰厛鎵撳紑涓插彛"); + return; + } + if (getAnchorId_jf().getText().length()!=4){ + ShowMessage.zidingyi("淇℃爣ID涓嶆纭�"); + return; + } + String ancID = getAnchorId_jf().getText();//鍩虹珯ID + String power = getAnchorPower_jf().getText();//淇℃爣鍔熺巼 + boolean poweraAnc = JugeIn.shuru("淇℃爣鍔熺巼", power); + if (poweraAnc){ + WriteReadAnchor.updateLora(power, (byte) 0x36, (byte) 0x01, ancID, ComMoudleComp.getSerialPort(),(byte) 0x02); + } + } + }); + } + return saveParam_anchorPower; + } + + // 鑾峰彇 saveParam 鎸夐挳锛岃嫢涓虹┖鍒欏垱寤� + public static JButton getSaveParam_jiaoZhunDis() { + if (saveParam_jiaoZhunDis == null) { + saveParam_jiaoZhunDis = new JButton("淇濆瓨鏍″噯璺濈"); // 鍒濆鍖栬鎸夐挳 + saveParam_jiaoZhunDis.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (!ComMoudleComp.isChuankou()) { + ShowMessage.zidingyi("璇峰厛鎵撳紑涓插彛"); + return; + } + if (getAnchorId_jf().getText().length()!=4){ + ShowMessage.zidingyi("淇℃爣ID涓嶆纭�"); + return; + } + String ancID = getAnchorId_jf().getText();//鍩虹珯ID + String dis = getJiaoZhunDis_jf().getText();//鏍″噯璺濈 + boolean distance = JugeIn.shuru("鏍″噯璺濈", dis); + if (distance){ + WriteReadAnchor.updateLora(dis, (byte) 0x0C, (byte) 0x01, ancID, ComMoudleComp.getSerialPort(),(byte) 0x02); + } + } + }); + } + return saveParam_jiaoZhunDis; + } + + + // 鑾峰彇 saveParam 鎸夐挳锛岃嫢涓虹┖鍒欏垱寤� + public static JButton getSaveParam_label6() { + if (saveParam_label6 == null) { + saveParam_label6 = new JButton("淇濆瓨鍙傛暟"); // 鍒濆鍖栬鎸夐挳 + saveParam_label6.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (!ComMoudleComp.isChuankou()) { + ShowMessage.zidingyi("璇峰厛鎵撳紑涓插彛"); + return; + } + if (getAnchorId_jf().getText().length()!=4){ + ShowMessage.zidingyi("淇℃爣ID涓嶆纭�"); + return; + } + String ancID = getAnchorId_jf().getText();//鍩虹珯ID + } + }); + } + return saveParam_label6; + } + + + // 鑾峰彇 saveParam 鎸夐挳锛岃嫢涓虹┖鍒欏垱寤� + public static JButton getSaveParam_label7() { + if (saveParam_label7 == null) { + saveParam_label7 = new JButton("淇濆瓨鍙傛暟"); // 鍒濆鍖栬鎸夐挳 + saveParam_label7.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (!ComMoudleComp.isChuankou()) { + ShowMessage.zidingyi("璇峰厛鎵撳紑涓插彛"); + return; + } + if (getAnchorId_jf().getText().length()!=4){ + ShowMessage.zidingyi("淇℃爣ID涓嶆纭�"); + return; + } + String ancID = getAnchorId_jf().getText();//鍩虹珯ID + } + }); + } + return saveParam_label7; + } + + + // 鑾峰彇 saveParam 鎸夐挳锛岃嫢涓虹┖鍒欏垱寤� + public static JButton getSaveParam_label8() { + if (saveParam_label8 == null) { + saveParam_label8 = new JButton("淇濆瓨鍙傛暟"); // 鍒濆鍖栬鎸夐挳 + saveParam_label8.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (!ComMoudleComp.isChuankou()) { + ShowMessage.zidingyi("璇峰厛鎵撳紑涓插彛"); + return; + } + if (getAnchorId_jf().getText().length()!=4){ + ShowMessage.zidingyi("淇℃爣ID涓嶆纭�"); + return; + } + String ancID = getAnchorId_jf().getText();//鍩虹珯ID + } + }); + } + return saveParam_label8; + } + + + + // 鑾峰彇 label1 鏍囩锛岃嫢涓虹┖鍒欏垱寤� + public static JLabel getAnchorId() { + if (anchorId == null) { + anchorId = new JLabel(" 淇℃爣ID"); // 鍒濆鍖栬鏍囩 + } + return anchorId; + } + + // 鑾峰彇 label2 鏍囩锛岃嫢涓虹┖鍒欏垱寤� + public static JLabel getAnchorVersion() { + if (anchorVersion == null) { + anchorVersion = new JLabel(" 淇℃爣鐗堟湰鍙�"); // 鍒濆鍖栬鏍囩 + } + return anchorVersion; + } + + // 鑾峰彇 label3 鏍囩锛岃嫢涓虹┖鍒欏垱寤� + public static JLabel getGroupId() { + if (groupId == null) { + groupId = new JLabel(" 閫氳灏忕粍"); // 鍒濆鍖栬鏍囩 + } + return groupId; + } + + // 鑾峰彇 label4 鏍囩锛岃嫢涓虹┖鍒欏垱寤� + public static JLabel getAnchorPower() { + if (anchorPower == null) { + anchorPower = new JLabel(" 淇℃爣鍔熺巼"); // 鍒濆鍖栬鏍囩 + } + return anchorPower; + } + + // 鑾峰彇 label5 鏍囩锛岃嫢涓虹┖鍒欏垱寤� + public static JLabel getJiaoZhunDis() { + if (jiaoZhunDis == null) { + jiaoZhunDis = new JLabel(" 鏍″噯璺濈"); // 鍒濆鍖栬鏍囩 + } + return jiaoZhunDis; + } + + // 鑾峰彇 label6 鏍囩锛岃嫢涓虹┖鍒欏垱寤� + public static JLabel getLabel6() { + if (label6 == null) { + label6 = new JLabel(" 淇濈暀鍙傛暟1"); // 鍒濆鍖栬鏍囩 + } + return label6; + } + + // 鑾峰彇 label7 鏍囩锛岃嫢涓虹┖鍒欏垱寤� + public static JLabel getLabel7() { + if (label7 == null) { + label7 = new JLabel(" 淇濈暀鍙傛暟2"); // 鍒濆鍖栬鏍囩 + } + return label7; + } + + // 鑾峰彇 label8 鏍囩锛岃嫢涓虹┖鍒欏垱寤� + public static JLabel getLabel8() { + if (label8 == null) { + label8 = new JLabel(" 淇濈暀鍙傛暟3"); // 鍒濆鍖栬鏍囩 + } + return label8; + } + + + // 鑾峰彇 textField1 鏂囨湰妗嗭紝鑻ヤ负绌哄垯鍒涘缓 + public static JTextField getAnchorId_jf() { + if (anchorId_jf == null) { + anchorId_jf = new JTextField(); // 鍒濆鍖栬鏂囨湰妗� + anchorId_jf.setEnabled(false); + } + return anchorId_jf; + } + + // 鑾峰彇 textField2 鏂囨湰妗嗭紝鑻ヤ负绌哄垯鍒涘缓 + public static JTextField getAnchorVersion_jf() { + if (anchorVersion_jf == null) { + anchorVersion_jf = new JTextField(); // 鍒濆鍖栬鏂囨湰妗� + anchorVersion_jf.setEnabled(false); + } + return anchorVersion_jf; + } + + // 鑾峰彇 textField3 鏂囨湰妗嗭紝鑻ヤ负绌哄垯鍒涘缓 + public static JTextField getGroupId_jf() { + if (groupId_jf == null) { + groupId_jf = new JTextField(); // 鍒濆鍖栬鏂囨湰妗� + } + return groupId_jf; + } + + // 鑾峰彇 textField4 鏂囨湰妗嗭紝鑻ヤ负绌哄垯鍒涘缓 + public static JTextField getAnchorPower_jf() { + if (anchorPower_jf == null) { + anchorPower_jf = new JTextField(); // 鍒濆鍖栬鏂囨湰妗� + } + return anchorPower_jf; + } + + // 鑾峰彇 textField5 鏂囨湰妗嗭紝鑻ヤ负绌哄垯鍒涘缓 + public static JTextField getJiaoZhunDis_jf() { + if (jiaoZhunDis_jf == null) { + jiaoZhunDis_jf = new JTextField(); // 鍒濆鍖栬鏂囨湰妗� + } + return jiaoZhunDis_jf; + } + + // 鑾峰彇 textField6 鏂囨湰妗嗭紝鑻ヤ负绌哄垯鍒涘缓 + public static JTextField getTextField6() { + if (textField6 == null) { + textField6 = new JTextField(); // 鍒濆鍖栬鏂囨湰妗� + } + return textField6; + } + + // 鑾峰彇 textField7 鏂囨湰妗嗭紝鑻ヤ负绌哄垯鍒涘缓 + public static JTextField getTextField7() { + if (textField7 == null) { + textField7 = new JTextField(); // 鍒濆鍖栬鏂囨湰妗� + } + return textField7; + } + + // 鑾峰彇 textField8 鏂囨湰妗嗭紝鑻ヤ负绌哄垯鍒涘缓 + public static JTextField getTextField8() { + if (textField8 == null) { + textField8 = new JTextField(); // 鍒濆鍖栬鏂囨湰妗� + } + return textField8; + } + +} diff --git a/src/index/JPanelMoudle/showDataComp.java b/src/index/JPanelMoudle/showDataComp.java new file mode 100644 index 0000000..4ec5f75 --- /dev/null +++ b/src/index/JPanelMoudle/showDataComp.java @@ -0,0 +1,158 @@ +package index.JPanelMoudle; + +import baowen.Dell_Baowen; +import tools.GetNowTime; +import tools.Tools; + +import javax.swing.*; +import javax.swing.border.TitledBorder; +import java.awt.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.nio.charset.Charset; + +public class showDataComp { + + private static JScrollPane dataShow;//瑙f瀽鏁版嵁婊氬姩闈㈡澘 + private static JTextArea textArea1; + private static JPopupMenu popupMenu;//鍙抽敭鑿滃崟鍒楄〃 + static boolean time=true;//鏄剧ず鏃堕棿鎴� + static boolean ascll=false;//ascll鏄剧ず + + // 鑾峰彇 textArea1 鏂囨湰鍖猴紝鑻ヤ负绌哄垯鍒涘缓 + public static JTextArea getTextArea1() { + if (textArea1 == null) { + textArea1 = new JTextArea(); // 鍒濆鍖栬鏂囨湰鍖� + textArea1.addMouseListener(new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + maybeShowPopup(e); + } + + @Override + public void mouseReleased(MouseEvent e) { + maybeShowPopup(e); + } + + // 鏄剧ず鍙抽敭鑿滃崟 + private void maybeShowPopup(MouseEvent e) { + if (e.isPopupTrigger()) { // 鍒ゆ柇鏄惁鏄彸閿偣鍑� + getPopupMenu().show(e.getComponent(), e.getX(), e.getY()); + } + } + }); + } + return textArea1; + } + // 鑾峰彇 瑙f瀽鏁版嵁婊氬姩闈㈡澘锛岃嫢涓虹┖鍒欏垱寤� + public static JScrollPane getDataShow() { + if (dataShow == null) { + dataShow = new JScrollPane(); // 鍒濆鍖栬婊氬姩闈㈡澘 + dataShow.setBorder(new TitledBorder("鎺ユ敹鏁版嵁瑙f瀽")); + } + return dataShow; + } + + public static JPopupMenu getPopupMenu(){ + if (popupMenu == null) { + popupMenu = new JPopupMenu(); + popupMenu.setBackground(new Color(245, 245, 245)); // 璁剧疆鑿滃崟鑳屾櫙鑹� + popupMenu.setFont(new Font("Segoe UI", Font.PLAIN, 14)); // 璁剧疆瀛椾綋 + + // 鍔ㄦ�佽绠楄彍鍗曢」鐨勬枃鏈� + String showAscll = ascll ? "HEX鏄剧ず" : "ASCLL鏄剧ず"; + String noShowtime = time ? "闅愯棌鏃堕棿鎴�" : "鏄剧ず鏃堕棿鎴�"; + + // 鍒涘缓鑿滃崟椤� + JMenuItem clear = new JMenuItem("娓呯┖绐楀彛"); + JMenuItem ascllShow = new JMenuItem(showAscll); + JMenuItem timeNoShow = new JMenuItem(noShowtime); + + // 娣诲姞鍔ㄤ綔鐩戝惉鍣� + clear.addActionListener(e -> textArea1.setText("")); + ascllShow.addActionListener(e -> setAscll()); + timeNoShow.addActionListener(e -> setTimeShow()); + + // 榧犳爣鎮仠鏃舵敼鍙樿儗鏅鑹� + clear.addMouseListener(createMouseAdapter(clear)); + ascllShow.addMouseListener(createMouseAdapter(ascllShow)); + timeNoShow.addMouseListener(createMouseAdapter(timeNoShow)); + + // 娣诲姞鑿滃崟椤瑰埌鑿滃崟 + popupMenu.add(clear); + popupMenu.addSeparator(); + popupMenu.add(ascllShow); + popupMenu.addSeparator(); + popupMenu.add(timeNoShow); + } else { + // 濡傛灉popupMenu宸茬粡鍒涘缓锛屾洿鏂拌彍鍗曢」 + // 鍔ㄦ�佹洿鏂拌彍鍗曢」鏂囨湰 + ((JMenuItem) popupMenu.getComponent(2)).setText(ascll ? "HEX鏄剧ず" : "ASCLL鏄剧ず"); + ((JMenuItem) popupMenu.getComponent(4)).setText(time ? "闅愯棌鏃堕棿鎴�" : "鏄剧ず鏃堕棿鎴�"); + } + + return popupMenu; + } + + // 榧犳爣鎮仠鏃舵敼鍙樿儗鏅鑹茬殑閫氱敤鏂规硶 + private static MouseAdapter createMouseAdapter(JMenuItem item) { + return new MouseAdapter() { + @Override + public void mouseEntered(MouseEvent e) { + item.setBackground(new Color(220, 220, 220)); // 璁剧疆鎮仠鏃剁殑棰滆壊 + } + + @Override + public void mouseExited(MouseEvent e) { + item.setBackground(new Color(240, 240, 240)); // 鎭㈠姝e父棰滆壊 + } + }; + } + + + public static void addAreaTextMes(byte[] Datas,String ip,int port) { + String message = ascll ? new String(Datas, Charset.forName("GBK")): Tools.Bytes2HexString(Datas); + if (time) { + getTextArea1().append(GetNowTime.timestamp2() + ":鏀垛啇" + message + "\n"); + }else { + getTextArea1().append( message + "\n"); + } + if (port!=9999) { + Dell_Baowen.intsert(ip, message, GetNowTime.timestamp2(), port); + } + // 鑾峰彇鏂囨湰鍖哄煙鐨勯暱搴︼紙鍗虫渶鍚庝竴琛岀殑缁撴潫浣嶇疆锛� + int length = textArea1.getDocument().getLength(); + // 璁剧疆鍏夋爣浣嶇疆鍒版枃鏈殑鏈熬 + textArea1.setCaretPosition(length); + } + + public static void addSendAreaTextMes(byte[] Datas){ + String message = ascll ? new String(Datas, Charset.forName("GBK")): Tools.Bytes2HexString(Datas); + if (time) { + getTextArea1().append(GetNowTime.timestamp2()+":鍙戔啋"+message+"\n"); + }else { + getTextArea1().append( message + "\n"); + } + // 鑾峰彇鏂囨湰鍖哄煙鐨勯暱搴︼紙鍗虫渶鍚庝竴琛岀殑缁撴潫浣嶇疆锛� + int length = textArea1.getDocument().getLength(); + // 璁剧疆鍏夋爣浣嶇疆鍒版枃鏈殑鏈熬 + textArea1.setCaretPosition(length); + } + + public static void setTimeShow(){ + if (time){ + time=false; + }else { + time=true; + } + } + + public static void setAscll(){ + if (ascll){ + ascll=false; + }else { + ascll=true; + } + } + +} diff --git a/src/index/JPanelMoudle/versionUpgradeComp.java b/src/index/JPanelMoudle/versionUpgradeComp.java new file mode 100644 index 0000000..cd20591 --- /dev/null +++ b/src/index/JPanelMoudle/versionUpgradeComp.java @@ -0,0 +1,228 @@ +package index.JPanelMoudle; + +import baowen.WriteReadAnchor; +import gnu.io.SerialPort; +import tools.ChuanKou.SerialPortUtil; +import tools.CustomProgressBar; +import tools.ShowMessage; +import ymodem.getFilesDataBytes; +import ymodem.YModemUpgradeThread; + +import javax.swing.*; +import javax.swing.border.TitledBorder; + + +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.File; + + +public class versionUpgradeComp { + private static JPanel versionUpdate;//鐗堟湰鍗囩骇闈㈡澘 + private static JLabel label9;//绌烘爣绛撅紝杩涜鍗犱綅 + private static JTextField readVersion_jf;//璇诲彇鎵弿鍣ㄧ増鏈枃鏈 + private static JTextField chooseVersion_jf;//閫夋嫨鍥轰欢鏂囨湰妗� + + private static JButton chooseVersion;//閫夋嫨鍥轰欢鎸夐挳 + private static JButton write_saoMiao;//鍐欏叆鎵弿鍣ㄦ寜閽� + public static boolean write=false;//鍐欏叆鎵弿鍣ㄦ寜閽� + public static boolean xinBiaoUp=false;//鍗囩骇淇℃爣鐗堟湰鎸夐挳 + private static JButton readVersion_jb;//璇诲彇鐗堟湰鎸夐挳 + private static JButton updateAnchor_jb;//鍗囩骇淇℃爣鐗堟湰鎸夐挳 + + private static CustomProgressBar jindu_SaoMiaoQi;//鍐欏叆鎵弿鍣ㄨ繘搴︽潯 + private static CustomProgressBar updateAnchor_jf;//鍗囩骇淇℃爣鐗堟湰杩涘害鏉� + + private static YModemUpgradeThread upgradeThread; // 淇濆瓨绾跨▼寮曠敤 + private static Color color = new Color(6, 176, 37);; // 淇濆瓨绾跨▼寮曠敤 + + // 鑾峰彇鐗堟湰鍗囩骇闈㈡澘锛岃嫢涓虹┖鍒欏垱寤� + public static JPanel getVersionUpdate() { + if (versionUpdate == null) { + versionUpdate = new JPanel(); // 鍒濆鍖栬闈㈡澘 + versionUpdate.setBorder(new TitledBorder("鍥轰欢鍗囩骇")); + } + return versionUpdate; + } + + // 鑾峰彇绌烘爣绛撅紝鑻ヤ负绌哄垯鍒涘缓 + public static JLabel getLabel9() { + if (label9 == null) { + label9 = new JLabel(); // 鍒濆鍖栬鏍囩 + } + return label9; + } + + + + // 鑾峰彇 閫夋嫨鍥轰欢 鎸夐挳锛岃嫢涓虹┖鍒欏垱寤� + public static JButton getChooseVersion() { + if (chooseVersion == null) { + chooseVersion = new JButton("閫夋嫨鍥轰欢"); // 鍒濆鍖栬鎸夐挳 + chooseVersion.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + // 鎵撳紑鏂囦欢閫夋嫨瀵硅瘽妗� + String currentDirectory = System.getProperty("user.dir"); + JFileChooser fileChooser = new JFileChooser(); + // 璁剧疆鏂囦欢閫夋嫨瀵硅瘽妗嗕负鍙�夋嫨鏂囦欢 + fileChooser.setDialogTitle("閫夋嫨鍥轰欢"); + fileChooser.setCurrentDirectory(new File(currentDirectory)); + int result = fileChooser.showOpenDialog(readParamsComp.getReadAncParam_jp()); + if (result == JFileChooser.APPROVE_OPTION) { + // 濡傛灉鐢ㄦ埛閫夋嫨浜嗘枃浠� + File selectedFile = fileChooser.getSelectedFile(); + // 鏄剧ず閫夋嫨鐨勬枃浠惰矾寰� + getChooseVersion_jf().setText(selectedFile.getPath());//鏂囦欢鍚嶇О); + } + } + }); + } + return chooseVersion; + } + + // 鑾峰彇 鍐欏叆鎵弿鍣� 鎸夐挳锛岃嫢涓虹┖鍒欏垱寤� + public static JButton getWrite_saoMiao() { + if (write_saoMiao == null) { + write_saoMiao = new JButton("鍐欏叆鎵弿鍣�"); // 鍒濆鍖栬鎸夐挳 + write_saoMiao.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if(!write) { + String filePath = getChooseVersion_jf().getText(); + if (!ComMoudleComp.isChuankou()) { + ShowMessage.zidingyi("涓插彛鏈瘑鍒�"); + return; + } + if (filePath == null || filePath.length() < 10) { + ShowMessage.zidingyi("鍥轰欢涓嶆纭�"); + return; + } + SerialPort serialPort = ComMoudleComp.getSerialPort(); + write = true; + byte[] bytes = WriteReadAnchor.write_lora((byte) 0x10, (byte) 0x2, 1); + YModemUpgradeThread.shengji(serialPort,filePath,bytes); + write_saoMiao.setText("鍙栨秷鍐欏叆"); + jindu_SaoMiaoQi.setStringPainted(true); // 鏄剧ず鐧惧垎姣旀枃瀛� + }else { + YModemUpgradeThread.setSendDataFlag(true); + exitUpgrade(); + } + } + }); + } + return write_saoMiao; + } + + + + // 鑾峰彇 璇诲彇鎵弿鍣ㄧ増鏈� 鎸夐挳锛岃嫢涓虹┖鍒欏垱寤� + public static JButton getReadVersion_jb() { + if (readVersion_jb == null) { + readVersion_jb = new JButton("璇诲彇鎵弿鍣ㄧ増鏈�"); // 鍒濆鍖栬鎸夐挳 + readVersion_jb.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + + if (!ComMoudleComp.isChuankou()) { + ShowMessage.zidingyi("涓插彛鏈瘑鍒�"); + return; + } + ShowMessage.zidingyi("璇诲彇鎵弿鍣ㄧ増鏈寚浠ゅ彂閫佹垚鍔�"); + byte[] byt = WriteReadAnchor.ReadData((byte) 0x2, (byte) 0x50); + WriteReadAnchor.sendData(ComMoudleComp.getSerialPort(), byt); + } + + }); + } + return readVersion_jb; + } + + // 鑾峰彇 鍗囩骇淇℃爣鐗堟湰 鎸夐挳锛岃嫢涓虹┖鍒欏垱寤� + public static JButton getUpdateAnchor_jb() { + if (updateAnchor_jb == null) { + updateAnchor_jb = new JButton("鍗囩骇淇℃爣鐗堟湰"); // 鍒濆鍖栬鎸夐挳 + updateAnchor_jb.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (!xinBiaoUp) { + + if (!ComMoudleComp.isChuankou()) { + ShowMessage.zidingyi("涓插彛鏈瘑鍒�"); + return; + } + String text = readParamsComp.getAnchorId_jf().getText(); + if (text.length() != 4) { + ShowMessage.zidingyi("淇℃爣ID涓嶆纭�,璇峰厛璇诲彇淇℃爣鍙傛暟"); + return; + } + SerialPort serialPort = ComMoudleComp.getSerialPort(); + xinBiaoUp=true; + updateAnchor_jb.setText("閫�鍑轰俊鏍囧崌绾�"); + WriteReadAnchor.updateLora("0", (byte) 0xAA,(byte) 0x06, text,serialPort,(byte) 0x02); + }else { + exitUpgradeXinBiao(); + } + } + }); + } + return updateAnchor_jb; + } + + + // 鑾峰彇 璇诲彇鎵弿鍣ㄧ増鏈� 鏂囨湰妗嗭紝鑻ヤ负绌哄垯鍒涘缓 + public static JTextField getReadVersion_jf() { + if (readVersion_jf == null) { + readVersion_jf = new JTextField(); // 鍒濆鍖栬鏂囨湰妗� + } + return readVersion_jf; + } + + // 鑾峰彇 閫夋嫨鍥轰欢 鏂囨湰妗嗭紝鑻ヤ负绌哄垯鍒涘缓 + public static JTextField getChooseVersion_jf() { + if (chooseVersion_jf == null) { + chooseVersion_jf = new JTextField(); // 鍒濆鍖栬鏂囨湰妗� + chooseVersion_jf.setEnabled(false); + } + return chooseVersion_jf; + } + + // 鑾峰彇 鍐欏叆鎵弿鍣� 杩涘害鏉★紝鑻ヤ负绌哄垯鍒涘缓 + public static CustomProgressBar getJindu_SaoMiaoQi() { + if (jindu_SaoMiaoQi == null) { + jindu_SaoMiaoQi = new CustomProgressBar(); // 鍒濆鍖栬杩涘害鏉� + jindu_SaoMiaoQi.setForeground(color); // 璁剧疆杩涘害鏉″墠鏅壊涓虹豢鑹� + // 鑷畾涔塙I鏉ヤ慨鏀规枃鏈鑹� + } + return jindu_SaoMiaoQi; + } + + + // 鑾峰彇 鍗囩骇淇℃爣鐗堟湰 杩涘害鏉★紝鑻ヤ负绌哄垯鍒涘缓 + public static CustomProgressBar getUpdateAnchor_jf() { + if (updateAnchor_jf == null) { + updateAnchor_jf = new CustomProgressBar(); // 鍒濆鍖栬杩涘害鏉� + updateAnchor_jf.setForeground(color); // 璁剧疆杩涘害鏉″墠鏅壊涓虹豢鑹� + } + return updateAnchor_jf; + } + + + public static boolean isWrite() { + return write; + } + + public static void exitUpgrade() { + write=false; + write_saoMiao.setText("鍐欏叆鎵弿鍣�"); + jindu_SaoMiaoQi.setValue(0); // 鏄剧ず鐧惧垎姣旀枃瀛� + } + + + public static void exitUpgradeXinBiao() { + xinBiaoUp=false; + updateAnchor_jb.setText("鍗囩骇淇℃爣鐗堟湰"); + updateAnchor_jf.setValue(0); // 鏄剧ず鐧惧垎姣旀枃瀛� + } +} diff --git a/src/index/Timer100.java b/src/index/Timer100.java new file mode 100644 index 0000000..40a2c8d --- /dev/null +++ b/src/index/Timer100.java @@ -0,0 +1,40 @@ +package index; + +import Anchor.anchor_Dell; +import index.JPanelMoudle.ComMoudleComp; +import index.JPanelMoudle.anchorListComp; + +import java.util.Timer; +import java.util.TimerTask; + +public class Timer100 { + + Timer timer; + int time=0; + + public void ding_shi_qi() { + Integer cacheTime = 100;//瑙﹀彂鍣ㄦ椂闂�100姣鎵ц涓�娆� + timer = new Timer(); + timer.schedule(new TimerTask() { + @Override + public void run() { + try { + time++; + if (time==10){ + if (ComMoudleComp.isChuankou()) { + anchorListComp.getRowData(anchor_Dell.getAnchors()); + }else { + anchorListComp.updateTable();//娓呯┖淇℃爣鍒楄〃 + } + time=0; + } + } catch (Exception e) { + // TODO 鑷姩鐢熸垚鐨� catch 鍧� + e.printStackTrace(); + } + } + }, 100, cacheTime); + + } + +} diff --git a/src/index/homeMain.java b/src/index/homeMain.java new file mode 100644 index 0000000..698ee79 --- /dev/null +++ b/src/index/homeMain.java @@ -0,0 +1,15 @@ +package index; + +import Anchor.anchor_Dell; +import baowen.Dell_Baowen; + +import javax.swing.*; + +public class homeMain { + public static void main(String[] args) { + new Dell_Baowen().startThread();//鍚姩鎶ユ枃瑙f瀽绾跨▼ + System.setProperty("sun.java2d.dpi", "96"); // 璁剧疆DPI鍊间负96锛堟爣鍑咲PI锛� + GCUWBreadIndex.startFrame();//鍚姩鍥惧舰鍖栫晫闈� + new Timer100().ding_shi_qi();//100姣瀹氭椂鍣� + } +} diff --git a/src/tools/AutoCloseDialog.java b/src/tools/AutoCloseDialog.java new file mode 100644 index 0000000..5c5d5f8 --- /dev/null +++ b/src/tools/AutoCloseDialog.java @@ -0,0 +1,63 @@ +package tools; +/**鑷姩鍏抽棴鐨勫璇濇*/ + +import javax.swing.*; +import java.util.Timer; +import java.util.TimerTask; + +public class AutoCloseDialog { + + + static ImageIcon icon = new ImageIcon("image/warn.png"); // 璇锋浛鎹负浣犲浘鏍囩殑璺緞 + + /**3绉掗挓娑堝け鐨勫璇濇*/ + public static JOptionPane getDialog(String message) { + JOptionPane op = new JOptionPane(message, + JOptionPane.INFORMATION_MESSAGE); + op.setIcon(icon); + final JDialog dialog = op.createDialog("鎻愮ず淇℃伅, 2绉掑悗鑷姩鍏抽棴锛�"); + + // 鍒涘缓涓�涓柊璁℃椂鍣� + Timer timer = new Timer(); + + // 3绉掑悗鎵ц璇ヤ换鍔� + timer.schedule(new TimerTask() { + public void run() { + dialog.setVisible(false); + dialog.dispose(); + } + }, 2000); + dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + dialog.setAlwaysOnTop(true); + dialog.setModal(false); + dialog.setVisible(true); + dialog.setIconImage(icon.getImage()); + return op; + } + + + /**24h娑堝け鐨勫璇濇*/ + public static JOptionPane getDialogno(String message) { + JOptionPane op = new JOptionPane(message,JOptionPane.INFORMATION_MESSAGE); + op.setIcon(icon); + final JDialog dialog = op.createDialog("鎻愮ず淇℃伅锛�"); + + // 鍒涘缓涓�涓柊璁℃椂鍣� + Timer timer = new Timer(); + + // 24灏忔椂鍚庡悗鎵ц璇ヤ换鍔� + timer.schedule(new TimerTask() { + public void run() { + dialog.setVisible(false); + dialog.dispose(); + } + }, 86400000); + dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); + dialog.setAlwaysOnTop(true); + dialog.setModal(false); + dialog.setVisible(true); + dialog.setIconImage(icon.getImage()); + return op; + } + +} diff --git a/src/tools/ChuanKou/CRC16.java b/src/tools/ChuanKou/CRC16.java new file mode 100644 index 0000000..0fcb344 --- /dev/null +++ b/src/tools/ChuanKou/CRC16.java @@ -0,0 +1,51 @@ +package tools.ChuanKou; + +/** + * CRC16鏍¢獙 + * + * @author yangle + */ +public class CRC16 { + + private static final char crctable[] = { 0x0000, 0x1021, 0x2042, 0x3063, + 0x4084, 0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, + 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, + 0x52b5, 0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, + 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, + 0x64e6, 0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, + 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, + 0x76d7, 0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, + 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, + 0x0840, 0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, + 0x8948, 0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, + 0x1a71, 0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, + 0x9b79, 0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, + 0x2c22, 0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, + 0xad2a, 0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, + 0x3e13, 0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, + 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, + 0xd10c, 0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, + 0x5004, 0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, + 0xc33d, 0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, + 0x4235, 0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, + 0xf56e, 0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, + 0x7466, 0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, + 0xe75f, 0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, + 0x6657, 0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, + 0x99c8, 0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, + 0x18c0, 0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, + 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, + 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, + 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, + 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, + 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, + 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 }; + + public static char calc(byte[] bytes) { + char crc = 0x0000; + for (byte b : bytes) { + crc = (char) ((crc << 8) ^ crctable[((crc >> 8) ^ b) & 0x00ff]); + } + return (char) (crc); + } +} diff --git a/src/tools/ChuanKou/SerialPortManager.java b/src/tools/ChuanKou/SerialPortManager.java new file mode 100644 index 0000000..f71fef8 --- /dev/null +++ b/src/tools/ChuanKou/SerialPortManager.java @@ -0,0 +1,52 @@ +package tools.ChuanKou; + + +import gnu.io.*; +import tools.ShowMessage; + +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +public class SerialPortManager { + static Enumeration<CommPortIdentifier> portList; + static CommPortIdentifier portId; + + + /** + * 鍒楀嚭鏈湴杩炴帴鐨勬墍鏈変覆鍙e悕绉伴泦鍚� + * @param args + */ + @SuppressWarnings("unchecked")//鍛婅瘔缂栬瘧鍣ㄥ拷鐣� unchecked 璀﹀憡淇℃伅锛屽浣跨敤List锛孉rrayList绛夋湭杩涜鍙傛暟鍖栦骇鐢熺殑璀﹀憡淇℃伅銆� + public static List<String> get_all_port(){ + List<String> all_port=new ArrayList<String>(); + portList = CommPortIdentifier.getPortIdentifiers(); + while(portList.hasMoreElements()){ + portId = (CommPortIdentifier)portList.nextElement(); + if(portId.getPortType() == CommPortIdentifier.PORT_SERIAL){ + all_port.add(portId.getName()); + } + } + return all_port; + } + + /**鎵撳紑涓插彛 + * @param chuankou 涓插彛鍙� + * @param botelv 娉㈢壒鐜�*/ + public static SerialPort open_chuankou(String chuankou,int botelv) { + SerialPort serialPort=null; + try { + serialPort =SerialPortUtil.openSerialPort(chuankou,botelv); + } catch (NoSuchPortException e) { + // TODO 鑷姩鐢熸垚鐨� catch 鍧� + ShowMessage.zidingyi(chuankou+"涓嶅瓨鍦紒"); + } catch (PortInUseException e) { + // TODO 鑷姩鐢熸垚鐨� catch 鍧� + ShowMessage.zidingyi(chuankou+"宸茶鍗犵敤锛�"); + } catch (UnsupportedCommOperationException e) { + // TODO 鑷姩鐢熸垚鐨� catch 鍧� + ShowMessage.zidingyi(chuankou+"涓嶆敮鎸佹搷浣滐紒"); + } + return serialPort; + + } +} diff --git a/src/tools/ChuanKou/SerialPortParameter.java b/src/tools/ChuanKou/SerialPortParameter.java new file mode 100644 index 0000000..382f13c --- /dev/null +++ b/src/tools/ChuanKou/SerialPortParameter.java @@ -0,0 +1,98 @@ +package tools.ChuanKou; + +import gnu.io.SerialPort; + +/** + * @name: SerialPortParameter + * @author: tuacy. + * @date: 2019/6/26. + * @version: 1.0 + * @Description: 涓插彛鍙傛暟 + */ +public final class SerialPortParameter { + + /** + * 涓插彛鍚嶇О(COM0銆丆OM1銆丆OM2绛夌瓑) + */ + private String serialPortName; + /** + * 娉㈢壒鐜� + * 榛樿锛�115200 + */ + private int baudRate; + /** + * 鏁版嵁浣� 榛樿8浣� + * 鍙互璁剧疆鐨勫�硷細SerialPort.DATABITS_5銆丼erialPort.DATABITS_6銆丼erialPort.DATABITS_7銆丼erialPort.DATABITS_8 + * 榛樿锛歋erialPort.DATABITS_8 + */ + private int dataBits; + /** + * 鍋滄浣� + * 鍙互璁剧疆鐨勫�硷細SerialPort.STOPBITS_1銆丼erialPort.STOPBITS_2銆丼erialPort.STOPBITS_1_5 + * 榛樿锛歋erialPort.STOPBITS_1 + */ + private int stopBits; + /** + * 鏍¢獙浣� + * 鍙互璁剧疆鐨勫�硷細SerialPort.PARITY_NONE銆丼erialPort.PARITY_ODD銆丼erialPort.PARITY_EVEN銆丼erialPort.PARITY_MARK銆丼erialPort.PARITY_SPACE + * 榛樿锛歋erialPort.PARITY_NONE + */ + private int parity; + + public SerialPortParameter(String serialPortName) { + this.serialPortName = serialPortName; + this.baudRate = 115200; + this.dataBits = SerialPort.DATABITS_8; + this.stopBits = SerialPort.STOPBITS_1; + this.parity = SerialPort.PARITY_NONE; + } + + public SerialPortParameter(String serialPortName, int baudRate) { + this.serialPortName = serialPortName; + this.baudRate = baudRate; + this.dataBits = SerialPort.DATABITS_8; + this.stopBits = SerialPort.STOPBITS_1; + this.parity = SerialPort.PARITY_NONE; + } + + public String getSerialPortName() { + return serialPortName; + } + + public void setSerialPortName(String serialPortName) { + this.serialPortName = serialPortName; + } + + public int getBaudRate() { + return baudRate; + } + + public void setBaudRate(int baudRate) { + this.baudRate = baudRate; + } + + public int getDataBits() { + return dataBits; + } + + public void setDataBits(int dataBits) { + this.dataBits = dataBits; + } + + public int getStopBits() { + return stopBits; + } + + public void setStopBits(int stopBits) { + this.stopBits = stopBits; + } + + public int getParity() { + return parity; + } + + public void setParity(int parity) { + this.parity = parity; + } +} + diff --git a/src/tools/ChuanKou/SerialPortUtil.java b/src/tools/ChuanKou/SerialPortUtil.java new file mode 100644 index 0000000..436fbbe --- /dev/null +++ b/src/tools/ChuanKou/SerialPortUtil.java @@ -0,0 +1,306 @@ +package tools.ChuanKou; + +import gnu.io.*; +import index.JPanelMoudle.ComMoudleComp; +import tools.ShowMessage; +import tools.Tools; + + +import javax.tools.Tool; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; +import java.util.TooManyListenersException; + +/** + * @name: SerialPortUtil + * @author: tuacy. + * @date: 2019/6/26. + * @version: 1.0 + * @Description: 涓插彛宸ュ叿绫� + */ +@SuppressWarnings("unused") +public class SerialPortUtil { + + /** + * 鑾峰緱绯荤粺鍙敤鐨勭鍙e悕绉板垪琛�(COM0銆丆OM1銆丆OM2绛夌瓑) + * + * @return List<String>鍙敤绔彛鍚嶇О鍒楄〃 + */ + + // 杈撳叆娴� + private static InputStream inputStream; + // 杈撳嚭娴� + private static OutputStream outputStream; + private static String data; + // 淇濆瓨涓插彛杩斿洖淇℃伅鍗佸叚杩涘埗 + + private static String dataHex; + + @SuppressWarnings("unchecked") + public static List<String> getSerialPortList() { + List<String> systemPorts = new ArrayList<>(); + //鑾峰緱绯荤粺鍙敤鐨勭鍙� + Enumeration<CommPortIdentifier> portList = CommPortIdentifier.getPortIdentifiers(); + while (portList.hasMoreElements()) { + String portName = portList.nextElement().getName();//鑾峰緱绔彛鐨勫悕瀛� + systemPorts.add(portName); + } + return systemPorts; + } + + /** + * 鎵撳紑涓插彛 + * + * @param serialPortName 涓插彛鍚嶇О + * @return SerialPort 涓插彛瀵硅薄 + * @throws NoSuchPortException 瀵瑰簲涓插彛涓嶅瓨鍦� + * @throws PortInUseException 涓插彛鍦ㄤ娇鐢ㄤ腑 + * @throws UnsupportedCommOperationException 涓嶆敮鎸佹搷浣滄搷浣� + */ + public static SerialPort openSerialPort(String serialPortName) + throws NoSuchPortException, PortInUseException, UnsupportedCommOperationException { + SerialPortParameter parameter = new SerialPortParameter(serialPortName); + return openSerialPort(parameter); + } + + /** + * 鎵撳紑涓插彛 + * + * @param serialPortName 涓插彛鍚嶇О + * @param baudRate 娉㈢壒鐜� + * @return SerialPort 涓插彛瀵硅薄 + * @throws NoSuchPortException 瀵瑰簲涓插彛涓嶅瓨鍦� + * @throws PortInUseException 涓插彛鍦ㄤ娇鐢ㄤ腑 + * @throws UnsupportedCommOperationException 涓嶆敮鎸佹搷浣滄搷浣� + */ + public static SerialPort openSerialPort(String serialPortName, int baudRate) + throws NoSuchPortException, PortInUseException, UnsupportedCommOperationException { + SerialPortParameter parameter =new SerialPortParameter(serialPortName, baudRate); + return openSerialPort(parameter); + } + + /** + * 鎵撳紑涓插彛 + * + * @param serialPortName 涓插彛鍚嶇О + * @param baudRate 娉㈢壒鐜� + * @param timeout 涓插彛鎵撳紑瓒呮椂鏃堕棿 + * @return SerialPort 涓插彛瀵硅薄 + * @throws NoSuchPortException 瀵瑰簲涓插彛涓嶅瓨鍦� + * @throws PortInUseException 涓插彛鍦ㄤ娇鐢ㄤ腑 + * @throws UnsupportedCommOperationException 涓嶆敮鎸佹搷浣滄搷浣� + */ + public static SerialPort openSerialPort(String serialPortName, int baudRate, int timeout) + throws NoSuchPortException, PortInUseException, UnsupportedCommOperationException { + SerialPortParameter parameter = new SerialPortParameter(serialPortName, baudRate); + return openSerialPort(parameter, timeout); + } + + /** + * 鎵撳紑涓插彛 + * + * @param parameter 涓插彛鍙傛暟 + * @return SerialPort 涓插彛瀵硅薄 + * @throws NoSuchPortException 瀵瑰簲涓插彛涓嶅瓨鍦� + * @throws PortInUseException 涓插彛鍦ㄤ娇鐢ㄤ腑 + * @throws UnsupportedCommOperationException 涓嶆敮鎸佹搷浣滄搷浣� + */ + public static SerialPort openSerialPort(SerialPortParameter parameter) + throws NoSuchPortException, PortInUseException, UnsupportedCommOperationException { + return openSerialPort(parameter, 2000); + } + + /** + * 鎵撳紑涓插彛 + * + * @param parameter 涓插彛鍙傛暟 + * @param timeout 涓插彛鎵撳紑瓒呮椂鏃堕棿 + * @return SerialPort涓插彛瀵硅薄 + * @throws NoSuchPortException 瀵瑰簲涓插彛涓嶅瓨鍦� + * @throws PortInUseException 涓插彛鍦ㄤ娇鐢ㄤ腑 + * @throws UnsupportedCommOperationException 涓嶆敮鎸佹搷浣滄搷浣� + */ + public static SerialPort openSerialPort(SerialPortParameter parameter, int timeout) + throws NoSuchPortException, PortInUseException, UnsupportedCommOperationException { + //閫氳繃绔彛鍚嶇О寰楀埌绔彛 + CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(parameter.getSerialPortName()); + //鎵撳紑绔彛锛岋紙鑷畾涔夊悕瀛楋紝鎵撳紑瓒呮椂鏃堕棿锛� + CommPort commPort = portIdentifier.open(parameter.getSerialPortName(), timeout); + //鍒ゆ柇鏄笉鏄覆鍙� + if (commPort instanceof SerialPort) { + SerialPort serialPort = (SerialPort) commPort; + //璁剧疆涓插彛鍙傛暟锛堟尝鐗圭巼锛屾暟鎹綅8锛屽仠姝綅1锛屾牎楠屼綅鏃狅級 + serialPort.setSerialPortParams(parameter.getBaudRate(), parameter.getDataBits(), parameter.getStopBits(), parameter.getParity()); + ShowMessage.zidingyi(parameter.getSerialPortName()+"鎵撳紑鎴愬姛锛�"); + //System.out.println("寮�鍚覆鍙f垚鍔燂紝涓插彛鍚嶇О锛�" + parameter.getSerialPortName()); + return serialPort; + } else { + //鏄叾浠栫被鍨嬬殑绔彛 + throw new NoSuchPortException(); + } + } + + + + + /** + * @throws Exception + * 鍏抽棴涓插彛 + * @author LinWenLi + * @date 2018骞�7鏈�21鏃ヤ笅鍗�3:45:43 + * @Description: 鍏抽棴涓插彛 + * @param: + * @return: void + * @throws + */ + public static void closeSerialPort(SerialPort serialPort) throws Exception { + if (serialPort != null) { + serialPort.notifyOnDataAvailable(false); + serialPort.removeEventListener(); + if (inputStream != null) { + try { + inputStream.close(); + inputStream = null; + } catch (IOException e) { + ShowMessage.zidingyi("鍏抽棴杈撳叆娴佹椂鍙戠敓IO寮傚父"); + } + } + if (outputStream != null) { + try { + outputStream.close(); + outputStream = null; + } catch (IOException e) { + ShowMessage.zidingyi("鍏抽棴杈撳叆娴佹椂鍙戠敓IO寮傚父"); + } + } + serialPort.close(); + serialPort = null; + ShowMessage.zidingyi("涓插彛鍏抽棴鎴愬姛"); + } + } + + + + + + /** + * 鍙戦�佷俊鎭埌涓插彛 + * @author LinWenLi + * @date 2018骞�7鏈�21鏃ヤ笅鍗�3:45:22 + * @param: serialPort 涓插彛瀵硅薄 + * @return: data 鍙戦�佺殑鏁版嵁 + * @throws + */ + public static void sendData(SerialPort serialPort, byte[] data) { + try { + outputStream = serialPort.getOutputStream(); + outputStream.write(data); + outputStream.flush(); + } catch (NullPointerException e) { + try { + throw new Exception("鎵句笉鍒颁覆鍙�"); + } catch (Exception e1) { + // TODO 鑷姩鐢熸垚鐨� catch 鍧� + e1.printStackTrace(); + } + } catch (IOException e) { + try { + throw new Exception("鍙戦�佷俊鎭埌涓插彛鏃跺彂鐢烮O寮傚父"); + } catch (Exception e1) { + // TODO 鑷姩鐢熸垚鐨� catch 鍧� + e1.printStackTrace(); + } + }finally { + try { + if (outputStream != null) { + outputStream.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + + + + + + + + + + + + + /** + * 璇诲彇涓插彛杩斿洖淇℃伅 + * @author LinWenLi + * @date 2018骞�7鏈�21鏃ヤ笅鍗�3:43:04 + * @return: byte[] + */ + public static byte[] readData(SerialPort serialPort) { + byte[] bytes=null; + try { + Thread.sleep(10); + inputStream = serialPort.getInputStream(); + // 閫氳繃杈撳叆娴佸璞$殑available鏂规硶鑾峰彇鏁扮粍瀛楄妭闀垮害 + bytes = new byte[inputStream.available()]; + // 浠庣嚎璺笂璇诲彇鏁版嵁娴� + int len = 0; + while ((len = inputStream.read(bytes)) != -1) {// 鐩存帴鑾峰彇鍒扮殑鏁版嵁 + data = new String(bytes, 0, len).trim();// 杞负鍗佸叚杩涘埗鏁版嵁 + dataHex = Tools.Bytes2HexString(bytes); + inputStream.close(); + inputStream = null; + break; + } + } catch (IOException e) { + try { + SerialPortUtil.closeSerialPort(serialPort); + ShowMessage.zidingyi_24("涓插彛閫氫俊寮傚父宸插叧闂紒"); + SerialPortUtil.getSerialPortList().clear(); + System.exit(-1); + } catch (Exception e1) { + // TODO 鑷姩鐢熸垚鐨� catch 鍧� + e1.printStackTrace(); + } + } catch (InterruptedException e) { + //throw new RuntimeException(e); + } + return bytes; + } + + + + + + /** + * 缁欎覆鍙h缃洃鍚� + * + * @param serialPort serialPort 瑕佽鍙栫殑涓插彛 + * @param listener SerialPortEventListener鐩戝惉瀵硅薄 + * @throws TooManyListenersException 鐩戝惉瀵硅薄澶 + */ + public static void setListenerToSerialPort(SerialPort serialPort, SerialPortEventListener listener) throws TooManyListenersException { + //缁欎覆鍙f坊鍔犱簨浠剁洃鍚� + + if(serialPort!=null) { + + serialPort.addEventListener(listener); + //涓插彛鏈夋暟鎹洃鍚� + serialPort.notifyOnDataAvailable(true); + //涓柇浜嬩欢鐩戝惉 + serialPort.notifyOnBreakInterrupt(true); + } + } + + + + +} + diff --git a/src/tools/ChuanKou/Xmodem.java b/src/tools/ChuanKou/Xmodem.java new file mode 100644 index 0000000..5e29af8 --- /dev/null +++ b/src/tools/ChuanKou/Xmodem.java @@ -0,0 +1,257 @@ +package tools.ChuanKou; + +import java.io.*; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +/** + * XModem鍗忚 + * + * @author + */ +@SuppressWarnings("all") +public class Xmodem { + + // 寮�濮� + private final byte SOH = 0x01; + // 缁撴潫 + private final byte EOT = 0x04; + // 搴旂瓟 + private final byte ACK = 0x06; + // 閲嶄紶 + private final byte NAK = 0x15; + // 鏃犳潯浠剁粨鏉� + private final byte CAN = 0x18; + + // 浠�128瀛楄妭鍧楃殑褰㈠紡浼犺緭鏁版嵁 + private final int SECTOR_SIZE = 128; + // 鏈�澶ч敊璇紙鏃犲簲绛旓級鍖呮暟 + private final int MAX_ERRORS = 10; + + // 杈撳叆娴侊紝鐢ㄤ簬璇诲彇涓插彛鏁版嵁 + private InputStream inputStream; + // 杈撳嚭娴侊紝鐢ㄤ簬鍙戦�佷覆鍙f暟鎹� + private OutputStream outputStream; + + public Xmodem(InputStream inputStream, OutputStream outputStream) { + this.inputStream = inputStream; + this.outputStream = outputStream; + } + + /** + * 鍙戦�佹暟鎹� + * + * @param filePath + * 鏂囦欢璺緞 + */ + public void send(final String filePath) { + new Thread() { + public void run() { + try { + // 閿欒鍖呮暟 + int errorCount; + // 鍖呭簭鍙� + byte blockNumber = 0x01; + // 鏍¢獙鍜� + int checkSum; + // 璇诲彇鍒扮紦鍐插尯鐨勫瓧鑺傛暟閲� + int nbytes; + // 鍒濆鍖栨暟鎹紦鍐插尯 + byte[] sector = new byte[SECTOR_SIZE]; + // 璇诲彇鏂囦欢鍒濆鍖� + DataInputStream inputStream = new DataInputStream( + new FileInputStream(filePath)); + + while ((nbytes = inputStream.read(sector)) > 0) { + // 濡傛灉鏈�鍚庝竴鍖呮暟鎹皬浜�128涓瓧鑺傦紝浠�0xff琛ラ綈 + if (nbytes < SECTOR_SIZE) { + for (int i = nbytes; i < SECTOR_SIZE; i++) { + sector[i] = (byte) 0xff; + } + } + + // 鍚屼竴鍖呮暟鎹渶澶氬彂閫�10娆� + errorCount = 0; + while (errorCount < MAX_ERRORS) { + // 缁勫寘 + // 鎺у埗瀛楃 + 鍖呭簭鍙� + 鍖呭簭鍙风殑鍙嶇爜 + 鏁版嵁鍖烘 + 鏍¢獙鍜� + putData(SOH); + putData(blockNumber); + putData(~blockNumber); + checkSum = CRC16.calc(sector) & 0x00ffff; + putChar(sector, (short) checkSum); + outputStream.flush(); + + // 鑾峰彇搴旂瓟鏁版嵁 + byte data = getData(); + // 濡傛灉鏀跺埌搴旂瓟鏁版嵁鍒欒烦鍑哄惊鐜紝鍙戦�佷笅涓�鍖呮暟鎹� + // 鏈敹鍒板簲绛旓紝閿欒鍖呮暟+1锛岀户缁噸鍙� + if (data == ACK) { + break; + } else { + ++errorCount; + } + } + // 鍖呭簭鍙疯嚜澧� + blockNumber = (byte) ((++blockNumber) % 256); + } + + // 鎵�鏈夋暟鎹彂閫佸畬鎴愬悗锛屽彂閫佺粨鏉熸爣璇� + boolean isAck = false; + while (!isAck) { + putData(EOT); + isAck = getData() == ACK; + } + } catch (Exception e) { + e.printStackTrace(); + } + }; + }.start(); + } + + /** + * 鎺ユ敹鏁版嵁 + * + * @param filePath + * 鏂囦欢璺緞 + * @return 鏄惁鎺ユ敹瀹屾垚 + * @throws IOException + * 寮傚父 + */ + public boolean receive(String filePath) throws Exception { + // 閿欒鍖呮暟 + int errorCount = 0; + // 鍖呭簭鍙� + byte blocknumber = 0x01; + // 鏁版嵁 + byte data; + // 鏍¢獙鍜� + int checkSum; + // 鍒濆鍖栨暟鎹紦鍐插尯 + byte[] sector = new byte[SECTOR_SIZE]; + // 鍐欏叆鏂囦欢鍒濆鍖� + DataOutputStream outputStream = new DataOutputStream( + new FileOutputStream(filePath)); + + // 鍙戦�佸瓧绗锛孋RC鏂瑰紡鏍¢獙 + putData((byte) 0x43); + + while (true) { + if (errorCount > MAX_ERRORS) { + outputStream.close(); + return false; + } + + // 鑾峰彇搴旂瓟鏁版嵁 + data = getData(); + if (data != EOT) { + try { + // 鍒ゆ柇鎺ユ敹鍒扮殑鏄惁鏄紑濮嬫爣璇� + if (data != SOH) { + errorCount++; + continue; + } + + // 鑾峰彇鍖呭簭鍙� + data = getData(); + // 鍒ゆ柇鍖呭簭鍙锋槸鍚︽纭� + if (data != blocknumber) { + errorCount++; + continue; + } + + // 鑾峰彇鍖呭簭鍙风殑鍙嶇爜 + byte _blocknumber = (byte) ~getData(); + // 鍒ゆ柇鍖呭簭鍙风殑鍙嶇爜鏄惁姝g‘ + if (data != _blocknumber) { + errorCount++; + continue; + } + + // 鑾峰彇鏁版嵁 + for (int i = 0; i < SECTOR_SIZE; i++) { + sector[i] = getData(); + } + + // 鑾峰彇鏍¢獙鍜� + checkSum = (getData() & 0xff) << 8; + checkSum |= (getData() & 0xff); + // 鍒ゆ柇鏍¢獙鍜屾槸鍚︽纭� + int crc = CRC16.calc(sector); + if (crc != checkSum) { + errorCount++; + continue; + } + + // 鍙戦�佸簲绛� + putData(ACK); + // 鍖呭簭鍙疯嚜澧� + blocknumber++; + // 灏嗘暟鎹啓鍏ユ湰鍦� + outputStream.write(sector); + // 閿欒鍖呮暟褰掗浂 + errorCount = 0; + + } catch (Exception e) { + e.printStackTrace(); + + } finally { + // 濡傛灉鍑洪敊鍙戦�侀噸浼犳爣璇� + if (errorCount != 0) { + putData(NAK); + } + } + } else { + break; + } + } + + // 鍏抽棴杈撳嚭娴� + outputStream.close(); + // 鍙戦�佸簲绛� + putData(ACK); + + return true; + } + + /** + * 鑾峰彇鏁版嵁 + * + * @return 鏁版嵁 + * @throws IOException + * 寮傚父 + */ + private byte getData() throws IOException { + return (byte) inputStream.read(); + } + + /** + * 鍙戦�佹暟鎹� + * + * @param data + * 鏁版嵁 + * @throws IOException + * 寮傚父 + */ + private void putData(int data) throws IOException { + outputStream.write((byte) data); + } + + /** + * 鍙戦�佹暟鎹� + * + * @param data + * 鏁版嵁 + * @param checkSum + * 鏍¢獙鍜� + * @throws IOException + * 寮傚父 + */ + private void putChar(byte[] data, short checkSum) throws IOException { + ByteBuffer bb = ByteBuffer.allocate(data.length + 2).order( + ByteOrder.BIG_ENDIAN); + bb.put(data); + bb.putShort(checkSum); + outputStream.write(bb.array()); + } +} \ No newline at end of file diff --git a/src/tools/CustomProgressBar.java b/src/tools/CustomProgressBar.java new file mode 100644 index 0000000..4b8eea4 --- /dev/null +++ b/src/tools/CustomProgressBar.java @@ -0,0 +1,45 @@ +package tools; + +import javax.swing.*; +import java.awt.*; + +public class CustomProgressBar extends JProgressBar { + private Color textColor = Color.BLACK; // 榛樿鏂囨湰棰滆壊 + + public CustomProgressBar() { + super(); + setStringPainted(true); // 鍏佽鏄剧ず鏂囨湰 + } + + public void setTextColor(Color textColor) { + this.textColor = textColor; + } + + @Override + protected void paintComponent(Graphics g) { + // 鍏堣皟鐢ㄧ埗绫荤殑paintComponent锛岀粯鍒惰繘搴︽潯鐨勮儗鏅拰鍓嶆櫙 + super.paintComponent(g); + + if (isStringPainted()) { + // 鑾峰彇杩涘害鐧惧垎姣旂殑鏂囨湰 + String text = String.format("%d%%", (int)(getPercentComplete() * 100)); + Graphics2D g2d = (Graphics2D) g; + + // 鑾峰彇鏂囨湰鍖哄煙鐨勭煩褰㈠尯鍩� + FontMetrics metrics = g2d.getFontMetrics(); + int x = (getWidth() - metrics.stringWidth(text)) / 2; + int y = (getHeight() + metrics.getAscent()) / 2; + + // 娓呴櫎鏂囨湰鍖哄煙锛岄伩鍏嶉噸褰� + g2d.setColor(getBackground()); // 浣跨敤鑳屾櫙鑹叉潵娓呴櫎鍖哄煙 + g2d.fillRect(x, y - metrics.getAscent(), metrics.stringWidth(text), metrics.getHeight()); + + // 璁剧疆鏂囨湰棰滆壊鍜屽瓧浣� + g2d.setColor(textColor); + g2d.setFont(getFont().deriveFont(Font.BOLD)); + + // 缁樺埗鏂囨湰 + g2d.drawString(text, x, y); + } + } +} diff --git a/src/tools/GetNowTime.java b/src/tools/GetNowTime.java new file mode 100644 index 0000000..6c35ed5 --- /dev/null +++ b/src/tools/GetNowTime.java @@ -0,0 +1,56 @@ +package tools; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.TimeZone; + +public class GetNowTime { + + public static String now() {//鑾峰彇鏃堕棿鏂规硶 + String msg=""; + Date date = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS"); + msg+="["+sdf.format(date)+"]"; + return msg; + + } + + /**鑾峰彇骞存湀鏃ユ椂鍒嗙姣鏃堕棿 2020-05-30 12:33:45.23*/ + public static String timestamp2() { + String d=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(Calendar.getInstance().getTime()); + d="["+d+"]"; + return d; + } + + + public static int timestamp() { + + int time=0; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + sdf.setTimeZone(TimeZone.getTimeZone("UTC")); + String inputString =sss(); + Date date = null; + try { + date = sdf.parse("1970-01-01 " + inputString); + } catch (ParseException e) { + // TODO 鑷姩鐢熸垚鐨� catch 鍧� + e.printStackTrace(); + } + + time=(int) date.getTime(); + return time; + } + + /**鑾峰彇姣鏃堕棿鎴�21:49:27.519*/ + public static String sss() {//鑾峰彇鏃堕棿鏂规硶 + String msg=""; + Date date = new Date(); + SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS"); + msg+=sdf.format(date); + return msg; + + } + + +} diff --git a/src/tools/Jiaoyan.java b/src/tools/Jiaoyan.java new file mode 100644 index 0000000..4a70f81 --- /dev/null +++ b/src/tools/Jiaoyan.java @@ -0,0 +1,109 @@ +package tools; +import java.math.BigInteger; + +public class Jiaoyan { + + /**鑾峰彇鏍¢獙鐮侀櫎鍘诲寘澶寸浉鍔犲彇鍙�*/ + public static byte[] check(byte[] byt) { + + //瀛楄妭鏁扮粍杞负16杩涘埗瀛楃涓�/2鍚庣殑闀垮害 + int size=BinaryToHexString2(byt).length()/2; + String[] hex=hex(BinaryToHexString2(byt)); + + //姹傚拰 + int sum=0; + for(int i=0;i<size;i++) { + sum+=decodeHEX(hex[i]); + } + + //鍙栧弽杞负16杩涘埗瀛楃涓� + String hex16=Integer.toHexString(~sum); + + //瀛楃涓茬殑闀垮害 + int lenth=hex16.length(); + + byte[] jiaoyan=hexStringToByteArray(hex16.substring(lenth-4, lenth)); + + return jiaoyan; + + } + + + /**鑾峰彇鏍¢獙鐮侀櫎鍘诲寘澶寸浉鍔犲彇鍙�*/ + public static String check2(String byt) { + + //瀛楄妭鏁扮粍杞负16杩涘埗瀛楃涓�/2鍚庣殑闀垮害 + int size=byt.length()/2; + String[] hex=hex(byt); + + //姹傚拰 + int sum=0; + for(int i=2;i<size-2;i++) { + sum+=decodeHEX(hex[i]); + } + + //鍙栧弽杞负16杩涘埗瀛楃涓� + String hex16=Integer.toHexString(~sum); + + //瀛楃涓茬殑闀垮害 + int lenth=hex16.length(); + + String jiaoyan=hex16.substring(lenth-4, lenth); + + return jiaoyan.toUpperCase(); + + } + + /**16杩涘埗杞负10杩涘埗*/ + public static int decodeHEX(String hexs){ + BigInteger bigint=new BigInteger(hexs, 16); + int numb=bigint.intValue(); + return numb; + + } + + /**灏�16杩涘埗瀛楃涓茶浆涓篽ex瀛楃涓叉暟缁�2涓瓧绗︿覆涓�涓�*/ + public static String[] hex(String message) { + int size=message.length()/2; + String[] hex=new String[size]; + for(int i=0;i<size;i++) { + hex[i]=message.substring(i*2, 2+i*2); + } + + return hex; + } + + + /**灏嗗瓧鑺傛暟缁勮浆鎹负16杩涘埗瀛楃涓叉棤绌烘牸*/ + public static String BinaryToHexString2(byte[] bytes) { + String hexStr = "0123456789ABCDEF"; + String result = ""; + String hex = ""; + for (byte b : bytes) { + hex = String.valueOf(hexStr.charAt((b & 0xF0) >> 4)); + hex += String.valueOf(hexStr.charAt(b & 0x0F)); + result += hex + ""; + } + return result; + } + + + /** + * 16杩涘埗琛ㄧず鐨勫瓧绗︿覆杞崲涓哄瓧鑺傛暟缁� + * + * @param hexString 16杩涘埗琛ㄧず鐨勫瓧绗︿覆 + * @return byte[] 瀛楄妭鏁扮粍 + */ + public static byte[] hexStringToByteArray(String hexString) { + hexString = hexString.replaceAll(" ", ""); + int len = hexString.length(); + byte[] bytes = new byte[len / 2]; + for (int i = 0; i < len; i += 2) { + // 涓や綅涓�缁勶紝琛ㄧず涓�涓瓧鑺�,鎶婅繖鏍疯〃绀虹殑16杩涘埗瀛楃涓诧紝杩樺師鎴愪竴涓瓧鑺� + bytes[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4) + Character + .digit(hexString.charAt(i+1), 16)); + } + return bytes; + } + +} diff --git a/src/tools/Judge/JugeIn.java b/src/tools/Judge/JugeIn.java new file mode 100644 index 0000000..0d767f2 --- /dev/null +++ b/src/tools/Judge/JugeIn.java @@ -0,0 +1,24 @@ +package tools.Judge; + + +import tools.ShowMessage; + + + +public class JugeIn { + + /**鍒ゆ柇杈撳叆鏄惁鍚堟硶锛屽杈撳叆涓簁ong*/ + public static boolean shuru(String name,String str) { + boolean inru=true; + + if(str.length()<1) { + ShowMessage.zidingyi(name+"涓嶈兘涓虹┖..."); + inru=false; + }else if(!JugeNumber.isDigit(str)) { + ShowMessage.zidingyi(name+"杈撳叆鍐呭鍙兘涓烘暣鏁�..."); + inru=false; + } + + return inru; + } +} diff --git a/src/tools/Judge/JugeNumber.java b/src/tools/Judge/JugeNumber.java new file mode 100644 index 0000000..c5d7694 --- /dev/null +++ b/src/tools/Judge/JugeNumber.java @@ -0,0 +1,136 @@ +package tools.Judge; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +public class JugeNumber { + + // 绾暟瀛� + private static String DIGIT_REGEX = "^-?\\d+$"; + + // 鍚湁鏁板瓧 + private static String CONTAIN_DIGIT_REGEX = ".*[0-9].*"; + + // 绾瓧姣� + private static String LETTER_REGEX = "[a-zA-Z]+"; + + // 鍖呭惈瀛楁瘝 + private static String CONTAIN_LETTER_REGEX = ".*[a-zA-z].*"; + + // 绾腑鏂� + private static String CHINESE_REGEX = "[\u4e00-\u9fa5]"; + + // 浠呬粎鍖呭惈瀛楁瘝鍜屾暟瀛� + private static String LETTER_DIGIT_REGEX = "^[a-z0-9A-Z]+$"; + + private static String CHINESE_LETTER_REGEX = "([\u4e00-\u9fa5]+|[a-zA-Z]+)"; + + private static String CHINESE_LETTER_DIGIT_REGEX = "^[a-z0-9A-Z\u4e00-\u9fa5]+$"; + + + + + + /*鏂规硶浜岋細鎺ㄨ崘锛岄�熷害鏈�蹇� + * 鍒ゆ柇鏄惁涓烘暣鏁� + * @param str 浼犲叆鐨勫瓧绗︿覆 + * @return 鏄暣鏁拌繑鍥瀟rue,鍚﹀垯杩斿洖false + */ + public static boolean isInteger(String str) { + Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$"); + return pattern.matcher(str).matches(); + } + + /** 鍒ゆ柇瀛楃涓叉槸鍚︿粎鍚湁鏁板瓧鍜屽瓧姣�*/ + public static boolean isLetterDigit(String str) { + return str.matches(LETTER_DIGIT_REGEX); + } + + + /** + * 鏄惁涓烘眽瀛楋紝涓嶅寘鎷爣鐐圭鍙� + * + * @param con + * @return true 鏄眽瀛� + */ + public static boolean isChinese(String con) { + Pattern pattern = Pattern.compile(CHINESE_REGEX); + for (int i = 0; i < con.length(); i = i + 1) { + if (!pattern.matcher( + String.valueOf(con.charAt(i))).find()) { + return false; + } + } + return true; + } + + + /** + * 鐢ㄦ鍒欒〃杈惧紡鍒ゆ柇瀛楃涓蹭腑鏄惁 浠呭寘鍚嫳鏂囧瓧姣嶃�佹暟瀛楀拰姹夊瓧 + * + * @param str + * @return + */ + public static boolean isLetterDigitOrChinese(String str) { + return str.matches(CHINESE_LETTER_DIGIT_REGEX); + } + + + /** + * 濮撳悕涓彲鍖呭惈姹夊瓧鍜屽瓧姣嶏紝鏃犲叾瀹冨瓧绗� + * + * @param passengerName + * @return + */ + public static boolean checkChineseLetter(String passengerName) { + Pattern pattern = Pattern.compile(CHINESE_LETTER_REGEX); + Matcher matcher = pattern.matcher(passengerName); + if (matcher.matches()) { + //涓嶅寘鍚壒娈婂瓧绗� + return true; + } else { + //鍖呭惈浜嗙壒娈婂瓧绗� + return false; + } + } + /** + * 鍒ゆ柇涓�涓瓧绗︿覆鏄惁鍖呭惈鏍囩偣绗﹀彿锛堜腑鏂囨垨鑰呰嫳鏂囨爣鐐圭鍙凤級锛宼rue 鍖呭惈銆�<br/> + * 鍘熺悊锛氬鍘熷瓧绗︿覆鍋氫竴娆℃竻娲楋紝娓呮礂鎺夋墍鏈夋爣鐐圭鍙枫��<br/> + * 姝ゆ椂锛屽鏋滃叆鍙� ret 鍖呭惈鏍囩偣绗﹀彿锛岄偅涔堟竻娲楀墠鍚庡瓧绗︿覆闀垮害涓嶅悓锛岃繑鍥瀟rue锛涘惁鍒欙紝闀垮害鐩哥瓑锛岃繑鍥瀎alse銆�<br/> + * + * @param ret + * @return true 鍖呭惈涓嫳鏂囨爣鐐圭鍙� + */ + public static boolean checkPunctuation(String ret) { + boolean b = false; + String tmp = ret; + // replaceAll閲岄潰鐨勬鍒欏尮閰嶅彲浠ユ竻绌哄瓧绗︿覆涓殑涓嫳鏂囨爣鐐圭鍙凤紝鍙繚鐣欐暟瀛椼�佽嫳鏂囧拰涓枃銆� + tmp = tmp.replaceAll("\\p{P}", ""); + if (ret.length() != tmp.length()) { + b = true; + } + return b; + } + + /**鍒ゆ柇瀛楃涓叉槸鍚︿负绾暟瀛�*/ + public static boolean isDigit(String ret) { + return ret.matches(DIGIT_REGEX); + } + + public static boolean isLetter(String ret) { + + return ret.matches(LETTER_REGEX); + } + + public static boolean hasDigit(String ret) { + return ret.matches(CONTAIN_DIGIT_REGEX); + } + + /**鍒ゆ柇鏄惁鍖呭惈瀛楁瘝*/ + public static boolean hasLetter(String ret) { + return ret.matches(CONTAIN_LETTER_REGEX); + } + + +} \ No newline at end of file diff --git a/src/tools/ShowMessage.java b/src/tools/ShowMessage.java new file mode 100644 index 0000000..65feb2d --- /dev/null +++ b/src/tools/ShowMessage.java @@ -0,0 +1,21 @@ +package tools; + +public class ShowMessage { + + + /**鑷畾涔夌殑鍐呭鎻愮ず*/ + public static void zidingyi(String zidingyi) { + AutoCloseDialog.getDialog(zidingyi); + } + + /**杞欢璇曠敤鏈熺粨鏉�*/ + public static void zhuce_off() { + AutoCloseDialog.getDialogno("杞欢璇曠敤鏈熷凡缁撴潫锛屽闇�缁х画浣跨敤璇峰悜鍖椾含鍗庢槦鏅烘帶鍏徃璐拱娉ㄥ唽鐮侊紒"); + } + + /**24灏忔椂娑堝け鐨勫璇濇*/ + public static void zidingyi_24(String str) { + AutoCloseDialog.getDialogno(str); + } + +} diff --git a/src/tools/Tools.java b/src/tools/Tools.java new file mode 100644 index 0000000..a9d73bf --- /dev/null +++ b/src/tools/Tools.java @@ -0,0 +1,223 @@ +package tools; + +import java.math.BigInteger; + +@SuppressWarnings("unused") +public class Tools { + + + + /** + * 将十六进制的字符串转换成字节数组 + * + * @param hexString + * @return + */ + public static byte[] hexStrToBinaryStr(String hexString) { + + + if (hexString==null) { + return null; + } + + hexString = hexString.replaceAll(" ", ""); + + int len = hexString.length(); + int index = 0; + + + byte[] bytes = new byte[len / 2]; + + while (index < len) { + + String sub = hexString.substring(index, index + 2); + bytes[index/2] = (byte)Integer.parseInt(sub,16); + index += 2; + } + + + return bytes; + } + + /** + * 将十六进制的字符串转换成字节数组不去除空格 + * + * @param hexString + * @return + */ + public static byte[] hexStrToBinaryStr2(String hexString) { + + if (hexString==null) { + return null; + } + + int len = hexString.length(); + + int index = 0; + + + byte[] bytes = new byte[len / 2]; + + while (index < len) { + String sub = hexString.substring(index, index + 2); + bytes[index/2] = (byte)Integer.parseInt(sub,16); + index += 2; + } + + + return bytes; + } + + + + public static final int registersToInt(byte[] bytes) { + return ( + ((bytes[0] & 0xff) << 24) | + ((bytes[1] & 0xff) << 16) | + ((bytes[2] & 0xff) << 8) | + (bytes[3] & 0xff) + ); + }//registersToInt + + + // hex转ASCII + public static String hexToAscii(String hex) { + StringBuilder ascii = new StringBuilder(); + // 去除 HEX 字符串中的空格 + hex = hex.replaceAll(" ", ""); + + // 每两个字符为一组,转换为对应的字节并拼接成 ASCII 字符 + for (int i = 0; i < hex.length(); i += 2) { + // 直接使用 charAt 获取每两个字符的十六进制数字 + char hexChar1 = hex.charAt(i); + char hexChar2 = hex.charAt(i + 1); + + // 组合十六进制字符为一个数字 + int decimalValue = (Character.digit(hexChar1, 16) << 4) + Character.digit(hexChar2, 16); + + // 转换为对应的 ASCII 字符并添加到结果中 + ascii.append((char) decimalValue); + } + + return ascii.toString(); // 返回拼接后的 ASCII 字符串 + } + + + + public static String byteToAscii(byte[] bytes) { + // 将字节数组转换为 ASCII 字符串 + String asciiString = new String(bytes, java.nio.charset.StandardCharsets.US_ASCII); + return asciiString; + } + + /**将字节数组转为16进制字符串*/ + public static String Bytes2HexString(byte[] b) { + String ret = ""; + for (int i = 0; i < b.length; i++) { + String hex = Integer.toHexString(b[i] & 0xFF); + if (hex.length() == 1) { + hex = '0' + hex; + } + ret += hex.toUpperCase(); + } + return ret; + } + + + + + + + + public static final float registersToFloat(byte[] bytes) { + return Float.intBitsToFloat(( + ((bytes[0] & 0xff) << 24) | + ((bytes[1] & 0xff) << 16) | + ((bytes[2] & 0xff) << 8) | + (bytes[3] & 0xff) + )); + }// + @SuppressWarnings("unused") + private static String intToHex(int n) { + StringBuffer s = new StringBuffer(); + String a; + char []b = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; + while(n != 0){ + s = s.append(b[n%16]); + n = n/16; + } + a = s.reverse().toString(); + return a; + } + + //将返回的数据转化为10进制数据 + public static int ormntoint(byte[] bytes){ + int aa=0; + aa=bytes[0]-48 +(bytes[1]-48)*10+(bytes[2]-48)*100+(bytes[3]-48)*1000; + return aa; + } + + + /** + * 16进制的字符串表示转成字节数组 + * + * @param hexString 16进制格式的字符串 + * @return 转换后的字节数组 + **/ + public static byte[] toByteArray(String hexString) { + byte[] byteArray=null; + if(hexString !=null || hexString !="") { + hexString = hexString.replaceAll(" ", ""); + byteArray = new byte[hexString.length() / 2]; + int k = 0; + for (int i = 0; i < byteArray.length; i++) {//因为是16进制,最多只会占用4位,转换成字节需要两个16进制的字符,高位在先 + byte high = (byte) (Character.digit(hexString.charAt(k), 16) & 0xff); + byte low = (byte) (Character.digit(hexString.charAt(k + 1), 16) & 0xff); + byteArray[i] = (byte) (high << 4 | low); + k += 2; + } + } + return byteArray; + } + + + public static byte[] intToRegisters(int v) { + byte[] registers = new byte[4]; + registers[0] = (byte) (0xff & (v >> 24)); + registers[1] = (byte) (0xff & (v >> 16)); + registers[2] = (byte) (0xff & (v >> 8)); + registers[3] = (byte) (0xff & v); + return registers; + } + + + + //转成字节数组 + public static String[] hex(String message) { + int size=message.length()/2; + String[] hex=new String[size]; + for(int i=0;i<size;i++) { + hex[i]=message.substring(i*2, 2+i*2); + } + + return hex; + } + + + /** + * 16进制转为10进制 + */ + public static int decodeHEX(String hexs) { + BigInteger bigint = new BigInteger(hexs, 16); + int numb = bigint.intValue(); + return numb; + } + + public static byte decodeHEXToInt8(String hexStr) { + BigInteger bigInt = new BigInteger(hexStr, 16); + // 将无符号整数转换为有符号的8位整数 + byte result = bigInt.byteValue(); + return result; + } +} + diff --git a/src/ymodem/CRC16.java b/src/ymodem/CRC16.java new file mode 100644 index 0000000..0849b36 --- /dev/null +++ b/src/ymodem/CRC16.java @@ -0,0 +1,76 @@ +package ymodem; + +import java.util.Arrays; + +/** + * Uses table for irreducible polynomial: 1 + x^2 + x^15 + x^16 + */ + +public class CRC16 { + private static int[] table = { + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7, + 0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6, + 0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485, + 0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4, + 0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC, + 0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B, + 0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12, + 0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A, + 0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41, + 0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49, + 0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70, + 0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78, + 0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F, + 0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E, + 0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D, + 0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C, + 0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3, + 0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A, + 0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92, + 0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9, + 0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1, + 0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8, + 0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0, + }; + + public static int getCRCLength() { + return 2; + } + + public static long calcCRC(byte[] block) { + int crc = 0x0000; + for (byte b : block) { + crc = ((crc << 8) ^ table[((crc >> 8) ^ (0xff & b))]) & 0xFFFF; + } + + return crc; + } + + public static byte[] getCRC16(byte[] block) { + byte[] crcBytes = new byte[getCRCLength()]; + long crcValue = calcCRC(block); + for (int i = 0; i < getCRCLength(); i++) { + crcBytes[getCRCLength() - i - 1] = (byte) ((crcValue >> (8 * i)) & 0xFF); + } + return crcBytes; + } + + public static byte[] getCRC16(byte[] block,int start) { + byte[] crcBytes = new byte[getCRCLength()]; + long crcValue = calcCRC(Arrays.copyOfRange(block, start, block.length-2)); + for (int i = 0; i < getCRCLength(); i++) { + crcBytes[getCRCLength() - i - 1] = (byte) ((crcValue >> (8 * i)) & 0xFF); + } + return crcBytes; + } + +} diff --git a/src/ymodem/YModemUpgradeThread.java b/src/ymodem/YModemUpgradeThread.java new file mode 100644 index 0000000..8527b91 --- /dev/null +++ b/src/ymodem/YModemUpgradeThread.java @@ -0,0 +1,145 @@ +package ymodem; + +import gnu.io.SerialPort; +import index.JPanelMoudle.showDataComp; +import index.JPanelMoudle.versionUpgradeComp; +import tools.ChuanKou.SerialPortUtil; +import tools.ShowMessage; +import tools.Tools; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; + +public class YModemUpgradeThread extends Thread { + + private static byte[][] dataBytes; // 鏁版嵁甯� + private static byte[] startBytes; // 璧峰甯� + private static byte[] endBytes ; // 缁撴潫甯� + private static final long TIMEOUT = 30000; // 瓒呰繃30绉掓湭鍥炲簲鍒欓��鍑哄崌绾фā寮� + private static SerialPort serialPort; + + static int numSend = 0; + static boolean SendDataFlag = false; + + + public static void shengji(SerialPort serialPort1, String filePath1,byte[] byt){ + SendDataFlag=false; + numSend=0; + serialPort = serialPort1; + SerialPortUtil.sendData(serialPort, byt); + ComSendUpdateFile(filePath1); + chushihua(); + } + + // 鏋勯�犲嚱鏁帮紝鎺ユ敹涓插彛鍜屾枃浠惰矾寰� + public static void chushihua() { + if (versionUpgradeComp.isWrite()) { + if (serialPort == null) { + return; + } else { + new YModemUpgradeThread().startThread(); + } + } + } + + public void startThread() { + Thread t = new Thread(this); + t.start(); + } + + public void run() { + try { + // 璋冪敤鍗囩骇杩囩▼ + upgtade(); + } catch (Exception e) { + Thread.currentThread().interrupt(); // 鎭㈠涓柇鏍囧織 + System.out.println("绾跨▼琚腑鏂紝姝e湪閫�鍑哄崌绾ц繃绋�..."); + e.printStackTrace(); + } + } + + //鍗囩骇鍥轰欢 + private void upgtade(){ + long startTime = System.currentTimeMillis(); + long l = System.currentTimeMillis() - startTime; + boolean b = l< TIMEOUT; + while (b&&!SendDataFlag) { + b=System.currentTimeMillis()-startTime<TIMEOUT; + // 绛夊緟鍥炲簲 + byte[] response = SerialPortUtil.readData(serialPort); + // 濡傛灉璁惧娌℃湁鍥炲簲锛堝洖搴斾负绌猴級,鍒欒涓烘槸瓒呮椂 + if (response == null || response.length == 0) { + continue; // 濡傛灉娌℃湁鍥炲簲锛岀户缁瓑寰� + } + showDataComp.addAreaTextMes(response,"127.0.0.1",9999); + if (response[0] == ymodem.ACK) { + numSend++; + sendData(numSend); + } else if (response[0] == ymodem.NAK || response[0] == ymodem.C) { + // 鏀跺埌NAK鎴朇A锛岄��鍑哄崌绾� + sendData(numSend); + }else if (response[0]==ymodem.CA){ + break; + } + } + if (!b){ + ShowMessage.zidingyi("鏁版嵁鎺ユ敹瓒呮椂,閫�鍑哄崌绾фā寮�"); + } + versionUpgradeComp.exitUpgrade(); + } + + + //鍙戦�佹暟鎹寘 + public static void sendData(int shuJuZhen) { + int length = dataBytes.length; + if (shuJuZhen == 0) { + SerialPortUtil.sendData(serialPort, startBytes); + getProgress(shuJuZhen, length); + } else if (shuJuZhen <= length && shuJuZhen > 0) { + SerialPortUtil.sendData(serialPort, dataBytes[shuJuZhen - 1]); + getProgress(shuJuZhen, length); + } else if (shuJuZhen == length + 1||shuJuZhen == length + 2) { + SerialPortUtil.sendData(serialPort,new byte[]{(byte) ymodem.EOT}); + getProgress(shuJuZhen, length); + } else if (shuJuZhen == length + 3) { + SerialPortUtil.sendData(serialPort,endBytes); + getProgress(shuJuZhen, length); + ShowMessage.zidingyi("鍗囩骇瀹屾垚"); + SendDataFlag=true; + numSend = 0; + } + } + + //璁$畻褰撳墠鍖呯殑杩涘害 + private static void getProgress(double shuJuZhen, int length) { + int i =(int) Math.round((shuJuZhen / (length +3)) * 100); + versionUpgradeComp.getJindu_SaoMiaoQi().setValue(i); + } + + //鑾峰彇瑕佸彂閫佺殑甯ф暟鎹� + public static void ComSendUpdateFile(String filePath){ + try { + File file = new File(filePath); + if (!file.exists()) { //濡傛灉鏂囦欢涓嶅瓨鍦� + ShowMessage.zidingyi("鏂囦欢涓嶅瓨鍦�" + filePath); //鎶涘嚭鏂囦欢鎵句笉鍒板紓甯� + return; + } + getFilesDataBytes.setNum(0); + startBytes = getFilesDataBytes.getStartData(file);//鑾峰彇璧峰甯ф暟鎹寘 + dataBytes = getFilesDataBytes.getData(file);//鑾峰彇鏁版嵁甯ф暟鎹寘 + endBytes = getFilesDataBytes.getEndData();//鑾峰彇缁撴潫甯ф暟鎹寘 + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static boolean isSendDataFlag() { + return SendDataFlag; + } + + public static void setSendDataFlag(boolean sendDataFlag) { + SendDataFlag = sendDataFlag; + } +} diff --git a/src/ymodem/getFilesDataBytes.java b/src/ymodem/getFilesDataBytes.java new file mode 100644 index 0000000..dfe1ddb --- /dev/null +++ b/src/ymodem/getFilesDataBytes.java @@ -0,0 +1,127 @@ +package ymodem; + + + + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +public class getFilesDataBytes { + public static final int SOH = 0x01; // 128瀛楄妭鏁版嵁鍖� + public static final int STX = 0x02; // 1024瀛楄妭鏁版嵁鍖� + private static int num = 0; // 甯у簭鍙� + + // 鑾峰彇鏂囦欢鐨勮捣濮嬫暟鎹寘 + public static byte[] getStartData(File file) { + int index = 0; + byte[] dat = new byte[133]; + byte[] nameBytes = file.getName().getBytes(); + byte[] lengthBytes = String.valueOf(file.length()).getBytes(); + dat[index++] = SOH; + dat[index++] = (byte) num++; + dat[index++] = (byte) ~dat[1]; + // 缁勫悎鏂囦欢鍚嶆暟鎹� + for (int i = 0; i < nameBytes.length; i++) { + dat[i + index] = nameBytes[i]; + } + index += nameBytes.length; + dat[index++] = 0x00; + // 缁勫悎鏂囦欢闀垮害鏁版嵁 + for (int i = 0; i < lengthBytes.length; i++) { + dat[i + index] = lengthBytes[i]; + } + index += lengthBytes.length; + dat[index++] = 0x00; + byte[] crcDat = CRC16.getCRC16(dat, 3); + dat[dat.length - 2] = crcDat[0]; + dat[dat.length - 1] = crcDat[1]; + return dat; + } + + // 鑾峰彇缁撴潫甯ф暟鎹� + public static byte[] getEndData() { + byte[] dat = new byte[133]; + dat[0] = SOH; + dat[1] = (byte) 0x00; + dat[2] = (byte) 0xFF; + byte[] crcDat = CRC16.getCRC16(dat, 3); + dat[dat.length - 2] = crcDat[0]; + dat[dat.length - 1] = crcDat[1]; + return dat; + } + + /** + * 鑾峰彇鏁版嵁甯ф暟鎹� + * + * @param file 鏂囦欢 + * @return 鏁版嵁甯ф暟缁� + * @throws IOException + */ + public static byte[][] getData(File file) throws IOException { + long len = file.length(); + int size = (int) Math.ceil(len / 1024d); + int size1 = (int) Math.ceil(len / 1024d); + double v = len % 1024d; + if (v==0){ + int i = size + 1; + size1=i; + } + //鑾峰彇鏁版嵁甯т釜鏁� + byte[][] result = new byte[size][1029]; + FileInputStream fis = new FileInputStream(file); + for (int i = 0; i < size1-1 ; i++) { //鐢熸垚鏁版嵁甯� + result[i][0] = STX; //1024瀛楄妭鏁版嵁鍖呭ご + result[i][1] = (byte) (num++); //鑷姩濉厖甯у簭鍙� + if (num > 255) { //甯у簭鍙锋渶澶�255 + num = 0; + } + result[i][2] = (byte) ~result[i][1]; //鍙栧弽甯у簭鍙� + fis.read(result[i], 3, 1024); + byte[] crc16 = CRC16.getCRC16(result[i], 3); //鑾峰彇crc16鏍¢獙 + result[i][result[i].length - 2] = crc16[0]; + result[i][result[i].length - 1] = crc16[1]; //濉厖crc16鏍¢獙 + } + int endLen = (int) len % 1024; + //濡傛灉鏈�鍚庝竴甯т笉鏄暣1024涓瓧鑺� + if (endLen > 0) { + //濡傛灉鏈�鍚庝竴甯ч暱搴﹀皬浜庣瓑浜�128 + if (endLen <= 128) { + //鏈�鍚庝竴甯т娇鐢�128瀛楄妭浼犺緭 + result[size - 1] = new byte[133]; + result[size - 1][0] = SOH; //128瀛楄妭鏁版嵁鍖呭ご + int n = fis.read(result[size - 1], 3, 128); //濉厖128涓瓧鑺傛暟鎹� + for (int i = n + 3; i < 131; i++) { //鍓╀綑浣嶅~鍏�0x1A + result[size - 1][i] = 0x1A; + } + } else { + //鏈�鍚庝竴甯т娇鐢�1024瀛楄妭浼犺緭 + result[size - 1][0] = STX; //1024瀛楄妭鏁版嵁鍖呭ご + int n = fis.read(result[size - 1], 3, 1024); //濉厖1024涓暟鎹� + for (int i = n + 3; i < 1027; i++) { //鍓╀綑浣嶅~鍏�0x1A + result[size - 1][i] = 0x1A; + } + } + result[size - 1][1] = (byte) (num++); //鑷姩濉厖甯у簭鍙� + if (num > 255) { //甯у簭鍙锋渶澶�255 + num = 0; + } + result[size - 1][2] = (byte) ~result[size - 1][1]; //鍙栧弽甯у簭鍙� + byte[] crc16 = CRC16.getCRC16(result[size - 1], 3); //鑾峰彇crc16鏍¢獙 + result[size - 1][result[size - 1].length - 2] = crc16[0]; + result[size - 1][result[size - 1].length - 1] = crc16[1]; //濉厖crc16鏍¢獙 + } + fis.close(); + return result; + } + + + + public static int getNum() { + return num; + } + + public static void setNum(int num) { + getFilesDataBytes.num = num; + } +} diff --git a/src/ymodem/netWorkUpgradeThread.java b/src/ymodem/netWorkUpgradeThread.java new file mode 100644 index 0000000..65c7d45 --- /dev/null +++ b/src/ymodem/netWorkUpgradeThread.java @@ -0,0 +1,201 @@ +package ymodem; + +import baowen.Dell_udpReceive; +import gnu.io.SerialPort; +import index.JPanelMoudle.showDataComp; +import index.JPanelMoudle.versionUpgradeComp; +import tools.ChuanKou.SerialPortUtil; +import tools.ShowMessage; +import tools.Tools; + +import java.io.File; +import java.io.IOException; +import java.net.*; + +public class netWorkUpgradeThread extends Thread { + + + private static byte[][] dataBytes; // 鏁版嵁甯� + private static byte[] startBytes; // 璧峰甯� + private static byte[] endBytes ; // 缁撴潫甯� + + private static final long TIMEOUT = 600000; // 瓒呰繃30绉掓湭鍥炲簲鍒欓��鍑哄崌绾фā寮� + static int numSend = 0; + static boolean SendDataFlag = false; + static String ip = "";//鐩爣璁惧ip鍦板潃 + static int port;//鐩爣璁惧绔彛 + static DatagramSocket socket; + static int bytlenth=1024; + static DatagramPacket packet; + + + public static void shengji(String ip1,int port1, String filePath1,byte[] byt,int nowPort){ + SendDataFlag=false; + numSend=0; + ip = ip1; + port = port1; + Dell_udpReceive.sendData(byt,ip,port); + ComSendUpdateFile(filePath1); + Dell_udpReceive.stopThread();//鏆傚仠瑙f瀽绾跨▼ + chushihua(nowPort); + + new Dell_udpReceive(nowPort);//閲嶆柊寮�濮嬭В鏋愮嚎绋� + } + + // 鏋勯�犲嚱鏁帮紝鎺ユ敹涓插彛鍜屾枃浠惰矾寰� + public static void chushihua(int nowPort) { + if (versionUpgradeComp.isWrite()) { + if (socket==null){ + try { + socket = new DatagramSocket(nowPort);//鍒涘缓socket + byte[] data = new byte[bytlenth]; // 鍒涘缓byte鏁扮粍 + packet= new DatagramPacket(data,bytlenth); + new netWorkUpgradeThread().startThread(); + } catch (SocketException e) { + throw new RuntimeException(e); + } + }else { + new netWorkUpgradeThread().startThread(); + } + } + } + + public void startThread() { + Thread t = new Thread(this); + t.start(); + } + + public void run() { + try { + // 璋冪敤鍗囩骇杩囩▼ + upgtade(); + stopThread(); + } catch (Exception e) { + Thread.currentThread().interrupt(); // 鎭㈠涓柇鏍囧織 + System.out.println("绾跨▼琚腑鏂紝姝e湪閫�鍑哄崌绾ц繃绋�..."); + e.printStackTrace(); + } + } + + //鍗囩骇鍥轰欢 + private void upgtade(){ + long startTime = System.currentTimeMillis(); + boolean b = System.currentTimeMillis() - startTime < TIMEOUT; + while (b&&!SendDataFlag) { + // 绛夊緟鍥炲簲 + byte[] recDat = getRecDat(); + // 濡傛灉璁惧娌℃湁鍥炲簲锛堝洖搴斾负绌猴級,鍒欒涓烘槸瓒呮椂 + if (recDat == null || recDat.length == 0) { + continue; + } + + showDataComp.addAreaTextMes(recDat,ip,port); + if (recDat[0] == ymodem.ACK) { + numSend++; + sendData(numSend); + } else if (recDat[0] == ymodem.NAK || recDat[0] == ymodem.C) { + // 鏀跺埌NAK鎴朇A锛岄��鍑哄崌绾� + sendData(numSend); + }else if (recDat[0]==ymodem.CA){ + break; + } + } + versionUpgradeComp.exitUpgrade(); + } + + + //鍙戦�佹暟鎹寘 + public static void sendData(int shuJuZhen) { + int length = dataBytes.length; + if (shuJuZhen == 0) { + sendData(startBytes,ip,port); + getProgress(shuJuZhen, length); + } else if (shuJuZhen <= length && shuJuZhen > 0) { + sendData(dataBytes[shuJuZhen - 1],ip,port); + getProgress(shuJuZhen, length); + } else if (shuJuZhen == length + 1||shuJuZhen == length + 2) { + sendData(new byte[]{(byte) ymodem.EOT},ip,port); + getProgress(shuJuZhen, length); + } else if (shuJuZhen == length + 3) { + sendData(endBytes,ip,port); + getProgress(shuJuZhen, length); + ShowMessage.zidingyi("鍗囩骇瀹屾垚"); + SendDataFlag=true; + numSend = 0; + } + } + + //璁$畻褰撳墠鍖呯殑杩涘害 + private static void getProgress(double shuJuZhen, int length) { + int i =(int) Math.round((shuJuZhen / (length +3)) * 100); + versionUpgradeComp.getJindu_SaoMiaoQi().setValue(i); + } + + //鑾峰彇瑕佸彂閫佺殑甯ф暟鎹� + public static void ComSendUpdateFile(String filePath){ + try { + File file = new File(filePath); + if (!file.exists()) { //濡傛灉鏂囦欢涓嶅瓨鍦� + ShowMessage.zidingyi("鏂囦欢涓嶅瓨鍦�" + filePath); //鎶涘嚭鏂囦欢鎵句笉鍒板紓甯� + return; + } + getFilesDataBytes.setNum(0); + startBytes = getFilesDataBytes.getStartData(file);//鑾峰彇璧峰甯ф暟鎹寘 + dataBytes = getFilesDataBytes.getData(file);//鑾峰彇鏁版嵁甯ф暟鎹寘 + endBytes = getFilesDataBytes.getEndData();//鑾峰彇缁撴潫甯ф暟鎹寘 + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static byte[] getRecDat() { + byte[] dat = new byte[0]; + try { + dat = null; + packet = new DatagramPacket(dat,100); + socket.receive(packet); + String hostAddress = packet.getAddress().getHostAddress(); + if (hostAddress.equals(ip)){ + int lenth=packet.getLength(); + dat=subBytes(packet.getData(),0, lenth); + } + return dat; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + + /**灏嗘暟鎹彂缁欑綉鍏�*/ + public static void sendData(byte[] data,String ipout,int portout) { + DatagramPacket packet=null; + InetAddress address=null; + //濡傛灉鏁版嵁绫诲瀷鐩稿悓 + try { + address=InetAddress.getByName(ipout); + } catch (UnknownHostException e) { + e.printStackTrace(); + } + packet=new DatagramPacket(data,data.length, address, portout); + try { + socket.send(packet); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public static byte[] subBytes(byte[] src, int begin, int count) { + byte[] bs = new byte[count]; + System.arraycopy(src, begin, bs, 0, count); + return bs; + } + + + + + public static void stopThread() { + if (socket != null && !socket.isClosed()) { + socket.close();//鍏抽棴socket瀵硅薄 + } + } +} diff --git a/src/ymodem/ymodem.java b/src/ymodem/ymodem.java new file mode 100644 index 0000000..9e2f1ae --- /dev/null +++ b/src/ymodem/ymodem.java @@ -0,0 +1,10 @@ +package ymodem; + +public class ymodem { + public static final int EOT = 0x04; // 结束传输 + public static final int ACK = 0x06; // 响应 + public static final int NAK = 0x15; // 不响应 + public static final int CA = 0x18; // 传输终止 + public static final int C = 0x43; // 请求数据包 + +} -- Gitblit v1.9.3