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