From 928380a58b93cc24d65a836071edafeed9f1a0ab Mon Sep 17 00:00:00 2001
From: whycq <10027870+whycq@user.noreply.gitee.com>
Date: 星期三, 14 八月 2024 12:36:28 +0800
Subject: [PATCH] #
---
app/src/main/java/com/example/agvcontroller/MainActivity.java | 35 ++++++-
app/src/main/java/com/example/agvcontroller/protocol/PacHeader.java | 28 +++++
app/src/main/java/com/example/agvcontroller/protocol2/AgvPackage.java | 101 ++++++++++++++++++++
app/src/main/java/com/example/agvcontroller/protocol2/PackagePart.java | 87 +++++++++++++++++
app/src/main/java/com/example/agvcontroller/socket/NettyServerHandler.java | 22 +---
app/src/main/java/com/example/agvcontroller/protocol/ProtocolEncoder.java | 18 +-
6 files changed, 260 insertions(+), 31 deletions(-)
diff --git a/app/src/main/java/com/example/agvcontroller/MainActivity.java b/app/src/main/java/com/example/agvcontroller/MainActivity.java
index 2df3a7f..69d593f 100644
--- a/app/src/main/java/com/example/agvcontroller/MainActivity.java
+++ b/app/src/main/java/com/example/agvcontroller/MainActivity.java
@@ -6,6 +6,8 @@
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
import android.os.Vibrator;
import android.util.Log;
import android.view.KeyEvent;
@@ -13,6 +15,8 @@
import android.view.View;
import android.widget.Button;
+import com.example.agvcontroller.protocol2.AgvPackage;
+import com.example.agvcontroller.protocol2.PackagePart;
import com.example.agvcontroller.socket.NettyServerHandler;
import com.example.agvcontroller.socket.SocketManager;
import com.example.agvcontroller.socket.SocketTask;
@@ -35,6 +39,21 @@
private Socket socket;
SocketManager socketManager;
+ private boolean isDowm = false;
+ private Handler handler = new Handler(new Handler.Callback() {
+ @Override
+ public boolean handleMessage(Message msg) {
+ // 鍦ㄨ繖閲岃繘琛屾墦鍗拌緭鍑�
+ System.out.println("鎵撳嵃杈撳嚭");
+ if (isDowm) {
+ byte[] message2 = new byte[]{0x01, 0x02, 0x03, 0x06}; // 绀轰緥娑堟伅
+ nettyServerHandler.sendMessageToClient(clientId, message2); // 鍙戦�佹秷鎭埌瀹㈡埛绔�
+ handler.sendEmptyMessageDelayed(0, 100);
+ }
+ return false;
+ }
+ });
+
String clientId;
NettyServerHandler nettyServerHandler;
@Override
@@ -46,10 +65,17 @@
vibrateButton = findViewById(R.id.btn_stop);
Intent intent = getIntent();
- //String clientId = intent.getStringExtra("message");
clientId = intent.getStringExtra("message");
Log.i("message1",clientId);
// 鍒濆鍖栧崟杞翠娇鑳�
+ int single = 9;
+ int len = PackagePart.UNIQUENO.getLen()
+ + PackagePart.TIMESTAMP.getLen()
+ + PackagePart.COMMAND_MARK.getLen()
+ + 16 + 1 + 1 + 1;
+ for (int i = 0; i < single; i++) {
+
+ }
byte[] message2 = new byte[]{0x01, 0x02, 0x03, 0x06}; // 绀轰緥娑堟伅
nettyServerHandler.sendMessageToClient(clientId, message2); // 鍙戦�佹秷鎭埌瀹㈡埛绔�
@@ -77,11 +103,10 @@
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) {
- byte[] message2 = new byte[]{0x01, 0x02, 0x03, 0x06}; // 绀轰緥娑堟伅
- nettyServerHandler.sendMessageToClient(clientId, message2); // 鍙戦�佹秷鎭埌瀹㈡埛绔�
+ isDowm = true;
+ handler.sendEmptyMessage(0);
} else if (motionEvent.getAction() == KeyEvent.ACTION_UP) {
- byte[] message2 = new byte[]{0x01, 0x02, 0x03, 0x07}; // 绀轰緥娑堟伅
- nettyServerHandler.sendMessageToClient(clientId, message2); // 鍙戦�佹秷鎭埌瀹㈡埛绔�
+ isDowm = false;
}
return false;
}
diff --git a/app/src/main/java/com/example/agvcontroller/protocol/PacHeader.java b/app/src/main/java/com/example/agvcontroller/protocol/PacHeader.java
index 2912ac4..17ecd50 100644
--- a/app/src/main/java/com/example/agvcontroller/protocol/PacHeader.java
+++ b/app/src/main/java/com/example/agvcontroller/protocol/PacHeader.java
@@ -7,6 +7,34 @@
*/
public class PacHeader {
+ public byte getStartSymbol() {
+ return startSymbol;
+ }
+
+ public int getContentLength() {
+ return contentLength;
+ }
+
+ public String getUniqueNo() {
+ return uniqueNo;
+ }
+
+ public ProtocolType getProtocolType() {
+ return protocolType;
+ }
+
+ public int getTimestamp() {
+ return timestamp;
+ }
+
+ public String getSerialNum() {
+ return serialNum;
+ }
+
+ public EncryType getEncryptType() {
+ return encryptType;
+ }
+
/**
* 璧峰绗�
* 鍥哄畾涓�"0xEE || 0xAA"
diff --git a/app/src/main/java/com/example/agvcontroller/protocol/ProtocolEncoder.java b/app/src/main/java/com/example/agvcontroller/protocol/ProtocolEncoder.java
index ddc38e0..30b8695 100644
--- a/app/src/main/java/com/example/agvcontroller/protocol/ProtocolEncoder.java
+++ b/app/src/main/java/com/example/agvcontroller/protocol/ProtocolEncoder.java
@@ -42,7 +42,7 @@
//String uniqueNo = pac.getHeader().getUniqueNo();
- //byte[] uniquenoBytes = RadixTools.intToBytes(Integer.parseInt(pac.getHeader().getUniqueNo())); // uniqueno
+ //byte[] uniquenoBytes = RadixTools.intToBytes(Integer.parseInt(pac.getHeader().getUniqueNo())); // uniqueno
int len = PackagePart.UNIQUENO.getLen() // len
@@ -50,14 +50,14 @@
+ PackagePart.COMMAND_MARK.getLen()
+ bodyBytes.length;
- //out.writeByte(pac.getHeader().getStartSymbol()) // symbol
- // .writeShortLE(len)
- // .writeBytes(Utils.reverse(uniquenoBytes)) // uniqueno
- // .writeIntLE((int) (System.currentTimeMillis() / 1000)) // timestamp
- // .writeByte(pac.getHeader().getProtocolType().getCode()) // type
- // .writeBytes(bodyBytes) // body
- // .writeShort(pac.getValidCode()) // valid
- //;
+ out.writeByte(pac.getHeader().getStartSymbol()) // symbol
+ .writeShortLE(len)
+ //.writeBytes(Utils.reverse(uniquenoBytes)) // uniqueno
+ .writeIntLE((int) (System.currentTimeMillis() / 1000)) // timestamp
+ .writeByte(pac.getHeader().getProtocolType().getCode()) // type
+ .writeBytes(bodyBytes) // body
+ .writeShort(pac.getValidCode()) // valid
+ ;
pac.setValidCode(ValidUtil.calculateValidByteFromBuff(out));
out.resetReaderIndex();
diff --git a/app/src/main/java/com/example/agvcontroller/protocol2/AgvPackage.java b/app/src/main/java/com/example/agvcontroller/protocol2/AgvPackage.java
new file mode 100644
index 0000000..a818bab
--- /dev/null
+++ b/app/src/main/java/com/example/agvcontroller/protocol2/AgvPackage.java
@@ -0,0 +1,101 @@
+package com.example.agvcontroller.protocol2;
+
+import com.example.agvcontroller.protocol.PacBody;
+import com.example.agvcontroller.protocol.PacErrorType;
+import com.example.agvcontroller.protocol.PacHeader;
+
+import io.netty.buffer.ByteBuf;
+
+public class AgvPackage {
+
+ /**
+ * 婧愭暟鎹寘缂撳啿鍖�(寮曠敤)
+ */
+ private ByteBuf sourceBuff;
+
+ /**
+ * 鍘熷娑堟伅瀵瑰簲鐨�16杩涘埗瀛楃涓�
+ */
+ private String sourceHexStr;
+
+ /**
+ * 娑堟伅澶撮儴
+ */
+ private PacHeader header;
+
+ /**
+ * 娑堟伅浣�
+ */
+ private PacBody body;
+
+ public ByteBuf getSourceBuff() {
+ return sourceBuff;
+ }
+
+ public void setSourceBuff(ByteBuf sourceBuff) {
+ this.sourceBuff = sourceBuff;
+ }
+
+ public String getSourceHexStr() {
+ return sourceHexStr;
+ }
+
+ public void setSourceHexStr(String sourceHexStr) {
+ this.sourceHexStr = sourceHexStr;
+ }
+
+ public PacHeader getHeader() {
+ return header;
+ }
+
+ public void setHeader(PacHeader header) {
+ this.header = header;
+ }
+
+ public int getValidCode() {
+ return validCode;
+ }
+
+ public void setValidCode(int validCode) {
+ this.validCode = validCode;
+ }
+
+ public PacBody getBody() {
+ return body;
+ }
+
+ public void setBody(PacBody body) {
+ this.body = body;
+ }
+
+ public boolean isErrorPac() {
+ return errorPac;
+ }
+
+ public void setErrorPac(boolean errorPac) {
+ this.errorPac = errorPac;
+ }
+
+ public PacErrorType getPacErrorType() {
+ return pacErrorType;
+ }
+
+ public void setPacErrorType(PacErrorType pacErrorType) {
+ this.pacErrorType = pacErrorType;
+ }
+
+ /**
+ * 娑堟伅鐨勬牎姝g爜
+ */
+ private int validCode;
+
+ /**
+ * 鏄惁涓烘牎楠屽紓甯稿寘
+ */
+ private boolean errorPac;
+
+ /**
+ * 鏍¢獙寮傚父绫诲瀷
+ */
+ private PacErrorType pacErrorType;
+}
diff --git a/app/src/main/java/com/example/agvcontroller/protocol2/PackagePart.java b/app/src/main/java/com/example/agvcontroller/protocol2/PackagePart.java
new file mode 100644
index 0000000..39ac18e
--- /dev/null
+++ b/app/src/main/java/com/example/agvcontroller/protocol2/PackagePart.java
@@ -0,0 +1,87 @@
+package com.example.agvcontroller.protocol2;
+
+/**
+ * 鎶ユ枃鏍囪瘑鏋氫妇
+ * 涓嬫爣1: 璧峰绱㈠紩
+ * 涓嬫爣2: 闀垮害
+ * 涓嬫爣3: 鎻忚堪
+ * Created by vincent on 2019-04-03
+ */
+public enum PackagePart {
+
+ /**
+ * 璧峰绗�
+ */
+ START_SYMBOL(0, 1, "璧峰绗�"),
+
+ /**
+ * 鏁版嵁鍗曞厓闀垮害
+ */
+ CONTENT_LENGTH(1, 2, "鏁版嵁鍗曞厓闀垮害"),
+
+
+ /**
+ * 鍞竴鏍囪瘑鐮�
+ */
+ UNIQUENO(3, 4, "鍞竴鏍囪瘑鐮�"),
+
+ /**
+ * 鏃堕棿鎴�
+ */
+ TIMESTAMP(7, 4, "鏃堕棿鎴�"),
+
+ /**
+ * 鍛戒护鏍囪瘑
+ */
+ COMMAND_MARK(11, 1, "鍛戒护鏍囪瘑"),
+
+ /**
+ * 鏁版嵁鍗曞厓
+ */
+ CONTENT(12, -1, "鏁版嵁鍗曞厓"),
+
+ /**
+ * 鏍¢獙鐮�
+ */
+ VALIDE_CODE( -1, 2, "鏍¢獙鐮�"),
+
+ /**
+ * 搴旂瓟鏍囧織
+ */
+ ACK_MARK(3, 1, "搴旂瓟鏍囧織"),
+
+ /**
+ * 鏁版嵁鍗曞厓鍔犲瘑鏂瑰紡
+ */
+ ENCRYPT_TYPE(21, 1, "鏁版嵁鍗曞厓鍔犲瘑鏂瑰紡"),
+
+ ;
+
+ // 瀛楄妭娈靛紑濮嬬储寮�
+ private Integer startIndex;
+
+ // 瀛楄妭娈垫�诲瓧鑺傛暟
+ private Integer len;
+
+ // 鎻忚堪
+ private String des;
+
+ PackagePart(int startIndex, int len, String des) {
+ this.startIndex = startIndex;
+ this.len = len;
+ this.des = des;
+ }
+
+ public Integer getStartIndex() {
+ return startIndex;
+ }
+
+ public Integer getLen() {
+ return len;
+ }
+
+ public String getDes() {
+ return des;
+ }
+
+}
diff --git a/app/src/main/java/com/example/agvcontroller/socket/NettyServerHandler.java b/app/src/main/java/com/example/agvcontroller/socket/NettyServerHandler.java
index 2d2c049..8c1bc95 100644
--- a/app/src/main/java/com/example/agvcontroller/socket/NettyServerHandler.java
+++ b/app/src/main/java/com/example/agvcontroller/socket/NettyServerHandler.java
@@ -3,6 +3,7 @@
import java.nio.charset.StandardCharsets;
import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandlerContext;
@@ -44,19 +45,6 @@
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
// 澶勭悊鎺ユ敹鍒扮殑娑堟伅
ByteBuf byteBuf = (ByteBuf) msg;
- //byte[] data = new byte[byteBuf.readableBytes()];
- //byteBuf.readBytes(data);
- //String received = new String(data, StandardCharsets.UTF_8);
- //System.out.println("Received from client: " + received);
- //
- //// 鍥炲娑堟伅
- ////ByteBuf response = Unpooled.copiedBuffer("Response from server", StandardCharsets.UTF_8);
- ////ctx.writeAndFlush(response);
- //
- //byte[] responseHex = hexStringToByteArray("48656c6c6f20576f726c64"); // "Hello World" in hex
- //ByteBuf response = Unpooled.wrappedBuffer(responseHex);
- //ctx.writeAndFlush(response);
-
try {
while (byteBuf.isReadable()) {
byte[] bytes = new byte[byteBuf.readableBytes()];
@@ -89,17 +77,17 @@
return data;
}
- public static void sendMessageToClient(String clientId, byte[] message) {
-
+ public static void sendMessageToClient(String clientId, Object message) {
Channel channel = channelMap.get(clientId);
+
if (channel != null && channel.isActive()) {
ByteBuf buf = Unpooled.wrappedBuffer(message);
+ String upperCase = ByteBufUtil.hexDump(buf).toUpperCase();
+ Log.d(TAG, "upperCase " + upperCase);
channel.writeAndFlush(buf);
} else {
Log.d(TAG, "Client " + clientId + " is not connected");
}
-
- Log.d(TAG, "Client " + clientId + " is not connected");
}
@Override
--
Gitblit v1.9.1