From c7e1fddc1dab02a992a9c54f55b0e518cd5f973d Mon Sep 17 00:00:00 2001
From: whycq <913841844@qq.com>
Date: 星期三, 05 二月 2025 13:07:32 +0800
Subject: [PATCH] #
---
 app/src/main/java/com/example/agvcontroller/protocol/HandleCmdType.java    |    4 
 .idea/deploymentTargetSelector.xml                                         |    4 
 app/src/main/java/com/example/agvcontroller/MainActivity.java              |   33 ++++-
 app/src/main/java/com/example/agvcontroller/StartActivity.java             |   43 +++----
 app/src/main/java/com/example/agvcontroller/socket/NettyServerHandler.java |    7 +
 app/src/main/java/com/example/agvcontroller/protocol/ProtocolEncoder.java  |   36 +++++++
 app/src/main/java/com/example/agvcontroller/AGVCar.java                    |  123 ++++++++++++++++++++++++
 app/src/main/java/com/example/agvcontroller/EditeAdapter.java              |    4 
 app/src/main/java/com/example/agvcontroller/protocol/AGV_F0_UP.java        |    9 +
 9 files changed, 224 insertions(+), 39 deletions(-)
diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index 32ed794..4776483 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -4,10 +4,10 @@
     <selectionStates>
       <SelectionState runConfigName="app">
         <option name="selectionMode" value="DROPDOWN" />
-        <DropdownSelection timestamp="2024-08-15T08:33:10.282255800Z">
+        <DropdownSelection timestamp="2025-01-21T07:56:54.827595Z">
           <Target type="DEFAULT_BOOT">
             <handle>
-              <DeviceId pluginId="PhysicalDevice" identifier="serial=2MM0223916052360" />
+              <DeviceId pluginId="PhysicalDevice" identifier="serial=30159834971" />
             </handle>
           </Target>
         </DropdownSelection>
diff --git a/app/src/main/java/com/example/agvcontroller/AGVCar.java b/app/src/main/java/com/example/agvcontroller/AGVCar.java
index 3d04798..c4acab6 100644
--- a/app/src/main/java/com/example/agvcontroller/AGVCar.java
+++ b/app/src/main/java/com/example/agvcontroller/AGVCar.java
@@ -1,11 +1,24 @@
 package com.example.agvcontroller;
 
-public class AGVCar {
+import java.io.Serializable;
+
+public class AGVCar implements Serializable {
     private String clientId;
     private String ip;
     private int port;
     private String agvNo;
     private int status;
+    private int battery;
+    private int agvStatus;
+    private int positionID;
+    private int positionX;
+    private int positionY;
+    private int agvAngle;
+    private int gyroAngle;
+    private int forkHeight;
+    private int forkExtend;
+    private int forkAngle;
+    private int agvError;
 
     public AGVCar(String clientId, String ip, int port, String agvNo, int status) {
         this.clientId = clientId;
@@ -14,6 +27,114 @@
         this.agvNo = agvNo;
         this.status = status;
     }
+
+    public AGVCar(String clientId, String ip, int port, String agvNo, int status, int battery, int agvStatus, int positionID, int positionX, int positionY, int agvAngle, int gyroAngle, int forkHeight, int forkExtend, int forkAngle, int agvError) {
+        this.clientId = clientId;
+        this.ip = ip;
+        this.port = port;
+        this.agvNo = agvNo;
+        this.status = status;
+        this.battery = battery;
+        this.agvStatus = agvStatus;
+        this.positionID = positionID;
+        this.positionX = positionX;
+        this.positionY = positionY;
+        this.agvAngle = agvAngle;
+        this.gyroAngle = gyroAngle;
+        this.forkHeight = forkHeight;
+        this.forkExtend = forkExtend;
+        this.forkAngle = forkAngle;
+        this.agvError = agvError;
+    }
+
+    public int getBattery() {
+        return battery;
+    }
+
+    public void setBattery(int battery) {
+        this.battery = battery;
+    }
+
+    public int getAgvStatus() {
+        return agvStatus;
+    }
+
+    public void setAgvStatus(int agvStatus) {
+        this.agvStatus = agvStatus;
+    }
+
+    public int getPositionID() {
+        return positionID;
+    }
+
+    public void setPositionID(int positionID) {
+        this.positionID = positionID;
+    }
+
+    public int getPositionX() {
+        return positionX;
+    }
+
+    public void setPositionX(int positionX) {
+        this.positionX = positionX;
+    }
+
+    public int getPositionY() {
+        return positionY;
+    }
+
+    public void setPositionY(int positionY) {
+        this.positionY = positionY;
+    }
+
+    public int getAgvAngle() {
+        return agvAngle;
+    }
+
+    public void setAgvAngle(int agvAngle) {
+        this.agvAngle = agvAngle;
+    }
+
+    public int getGyroAngle() {
+        return gyroAngle;
+    }
+
+    public void setGyroAngle(int gyroAngle) {
+        this.gyroAngle = gyroAngle;
+    }
+
+    public int getForkHeight() {
+        return forkHeight;
+    }
+
+    public void setForkHeight(int forkHeight) {
+        this.forkHeight = forkHeight;
+    }
+
+    public int getForkExtend() {
+        return forkExtend;
+    }
+
+    public void setForkExtend(int forkExtend) {
+        this.forkExtend = forkExtend;
+    }
+
+    public int getForkAngle() {
+        return forkAngle;
+    }
+
+    public void setForkAngle(int forkAngle) {
+        this.forkAngle = forkAngle;
+    }
+
+    public int getAgvError() {
+        return agvError;
+    }
+
+    public void setAgvError(int agvError) {
+        this.agvError = agvError;
+    }
+
     public String getClientId() {return clientId; }
 
     public String getIp() {
diff --git a/app/src/main/java/com/example/agvcontroller/EditeAdapter.java b/app/src/main/java/com/example/agvcontroller/EditeAdapter.java
index 60d7986..a6a04be 100644
--- a/app/src/main/java/com/example/agvcontroller/EditeAdapter.java
+++ b/app/src/main/java/com/example/agvcontroller/EditeAdapter.java
@@ -8,9 +8,9 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.EditText;
+import android.widget.ImageButton;
 
 import androidx.annotation.NonNull;
-import androidx.appcompat.widget.AppCompatImageButton;
 import androidx.recyclerview.widget.RecyclerView;
 
 import java.util.List;
@@ -26,7 +26,7 @@
     public static class ViewHolder extends RecyclerView.ViewHolder {
         EditText agvNo;
         EditText ip;
-        AppCompatImageButton btn;
+        ImageButton btn;
 
         public ViewHolder(@NonNull View itemView) {
             super(itemView);
diff --git a/app/src/main/java/com/example/agvcontroller/MainActivity.java b/app/src/main/java/com/example/agvcontroller/MainActivity.java
index a374ad3..9e7b4e1 100644
--- a/app/src/main/java/com/example/agvcontroller/MainActivity.java
+++ b/app/src/main/java/com/example/agvcontroller/MainActivity.java
@@ -20,6 +20,7 @@
 import android.widget.GridLayout;
 import android.widget.RelativeLayout;
 import android.widget.Switch;
+import android.widget.TextView;
 
 import com.example.agvcontroller.action.AllResetAction;
 import com.example.agvcontroller.action.BackPaddle;
@@ -54,6 +55,8 @@
 
     public static final Map<String, Object> map = new ConcurrentHashMap();
     public static final Map<String, Object> car_num = new ConcurrentHashMap();
+
+    private static TextView agvBattery;
 
     private Vibrator vibrator;
     private Button stopBtn;  // 鎬ュ仠鎸夐挳
@@ -115,7 +118,7 @@
 
     private Button bodySwitchBtn; // 搴曠洏/璐у弶鍒囨崲
     private Socket socket;
-    private String AgvNo = "1";
+
     private RelativeLayout layout_bottom;
     private RelativeLayout layout_top;
     private GridLayout layout_single;
@@ -367,14 +370,19 @@
             return false;
         }
     });
-
+    static String AgvNo = "1";
     static String clientId;
     NettyServerHandler nettyServerHandler;
+
+
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
+
+        agvBattery = findViewById(R.id.agv_battery);
+
 
 
         // 鎸夐挳闇囧姩
@@ -448,11 +456,9 @@
 
         Intent intent = getIntent();
         if (intent != null) {
-            String newClientId = intent.getStringExtra("clientId");
-            if (newClientId != null) {
-                clientId = newClientId;
-                AgvNo = intent.getStringExtra("agvNo");
-            }
+            AGVCar car = (AGVCar) intent.getSerializableExtra("item");
+            clientId = car.getClientId();
+            AgvNo = car.getAgvNo();
         }
 
         Log.i("message1",clientId);
@@ -1359,7 +1365,16 @@
         //socketManager.stopServer(); // 鍋滄鏈嶅姟鍣�
     }
 
-    public static void upClient(String newClientId) {
-        clientId = newClientId;
+    public static void upClient(AGVCar agvCar) {
+        clientId = agvCar.getClientId();
+        AgvNo = agvCar.getAgvNo();
+        agvBattery.setText("鐢甸噺锛�" + agvCar.getBattery() + "%");
+//        updateAgvBatteryText("鐢甸噺锛�" + agvCar.getBattery() + "%");
+    }
+
+    private static void updateAgvBatteryText(String batteryLevel) {
+        if (agvBattery != null) {
+            agvBattery.setText(batteryLevel);
+        }
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/example/agvcontroller/StartActivity.java b/app/src/main/java/com/example/agvcontroller/StartActivity.java
index c6eef62..9a582bc 100644
--- a/app/src/main/java/com/example/agvcontroller/StartActivity.java
+++ b/app/src/main/java/com/example/agvcontroller/StartActivity.java
@@ -69,14 +69,16 @@
             public void onItemClick(View view, int position) {
                 Context context = view.getContext();
                 Intent intent = new Intent(context,MainActivity.class);
-                String ip = items.get(position).getIp();
-                String clientId = items.get(position).getClientId();
-                String agvNo = items.get(position).getAgvNo();
+                AGVCar item = items.get(position);
+//                String ip = items.get(position).getIp();
+//                String clientId = items.get(position).getClientId();
+//                String agvNo = items.get(position).getAgvNo();
 
 
-                intent.putExtra("ip", ip);
-                intent.putExtra("agvNo", agvNo);
-                intent.putExtra("clientId", clientId);
+//                intent.putExtra("ip", ip);
+//                intent.putExtra("agvNo", agvNo);
+//                intent.putExtra("clientId", clientId);
+                intent.putExtra("item", item);
                 startActivityForResult(intent,1);
             }
         });
@@ -96,38 +98,31 @@
     }
 
     @Subscribe(threadMode = ThreadMode.MAIN)
-    public void onDeviceConnected(AGVCar deviceAddress) {
-        Log.i("EventBus", "Received device connected: " + deviceAddress);
+    public void onDeviceConnected(AGVCar car) {
+        Log.i("EventBus", "Received device connected: " + car);
 
 
         if (!items.isEmpty()) {
             int sameIp = 0;
             for (AGVCar item : items) {
-                if (item.getIp().equals(deviceAddress.getIp())) {
-                    item.setAgvNo(deviceAddress.getAgvNo());
-                    item.setPort(deviceAddress.getPort());
-                    item.setClientId(deviceAddress.getClientId());
-                    item.setStatus(deviceAddress.getStatus());
+                if (item.getIp().equals(car.getIp())) {
+                    item.setAgvNo(car.getAgvNo().isEmpty() ? car.getAgvNo() : item.getAgvNo());
+                    item.setPort(car.getPort());
+                    item.setClientId(car.getClientId());
+                    item.setStatus(car.getStatus());
+                    item.setBattery(car.getBattery() != 0  ? car.getBattery() : item.getBattery());
                     adapter.notifyItemChanged(items.indexOf(item));
-                    MainActivity.upClient(deviceAddress.getClientId());
+                    MainActivity.upClient(car);
                     sameIp++;
                 }
                 Log.i("Item",item.getIp());
                 Log.i("Item",item.getClientId());
             }
             if (sameIp == 0) {
-                items.add(new AGVCar(deviceAddress.getClientId()
-                        ,deviceAddress.getIp()
-                        ,deviceAddress.getPort()
-                        ,deviceAddress.getAgvNo()
-                        ,deviceAddress.getStatus()));
+                items.add(car);
             }
         } else {
-            items.add(new AGVCar(deviceAddress.getClientId()
-                    ,deviceAddress.getIp()
-                    ,deviceAddress.getPort()
-                    ,deviceAddress.getAgvNo()
-                    ,deviceAddress.getStatus()));
+            items.add(car);
         }
         adapter.notifyDataSetChanged();
     }
diff --git a/app/src/main/java/com/example/agvcontroller/protocol/AGV_F0_UP.java b/app/src/main/java/com/example/agvcontroller/protocol/AGV_F0_UP.java
index 8ebe5ca..613de86 100644
--- a/app/src/main/java/com/example/agvcontroller/protocol/AGV_F0_UP.java
+++ b/app/src/main/java/com/example/agvcontroller/protocol/AGV_F0_UP.java
@@ -24,6 +24,10 @@
         // type
         this.type = Utils.sliceWithReverse(bytes, 4, 1)[0];
 
+        this.battery = Utils.sliceWithReverse(bytes, 32, 1)[0];
+
+
+
 
     }
 
@@ -36,5 +40,10 @@
 
     private byte type;
 
+    private int battery;
+
+    public int getBattery() {
+        return battery;
+    }
 }
 
diff --git a/app/src/main/java/com/example/agvcontroller/protocol/HandleCmdType.java b/app/src/main/java/com/example/agvcontroller/protocol/HandleCmdType.java
index 1bb507d..1acdc25 100644
--- a/app/src/main/java/com/example/agvcontroller/protocol/HandleCmdType.java
+++ b/app/src/main/java/com/example/agvcontroller/protocol/HandleCmdType.java
@@ -84,4 +84,8 @@
         return null;
     }
 
+    public String getDesc() {
+        return desc;
+    }
+
 }
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 15f2a0a..c4d1c4c 100644
--- a/app/src/main/java/com/example/agvcontroller/protocol/ProtocolEncoder.java
+++ b/app/src/main/java/com/example/agvcontroller/protocol/ProtocolEncoder.java
@@ -1,8 +1,11 @@
 package com.example.agvcontroller.protocol;
 
 
+import android.util.Log;
+
 import com.example.agvcontroller.socket.RadixTools;
 
+import java.net.InetSocketAddress;
 import java.util.logging.Logger;
 
 import io.netty.buffer.ByteBuf;
@@ -28,6 +31,8 @@
 
     @Override
     protected void encode(ChannelHandlerContext ctx, Object obj, ByteBuf out) {
+        InetSocketAddress remoteAddress = (InetSocketAddress) ctx.channel().remoteAddress();
+        String ip = remoteAddress.getAddress().getHostAddress();
 
         if (obj instanceof ByteBuf){
             out.writeBytes((ByteBuf) obj);
@@ -69,7 +74,13 @@
 
             out.writerIndex(out.readableBytes() - 2);
             out.writeShortLE(validCode);
+            // 鐢熸垚鏁翠釜鎶ユ枃鐨勫瓧鑺傛暟缁�
+            byte[] buffer = new byte[out.readableBytes()];
+            out.getBytes(out.readerIndex(), buffer);
 
+            // 灏嗗瓧鑺傛暟缁勮浆鎹负 16 杩涘埗瀛楃涓�
+            String hexMessage = bytesToHex(buffer);
+            Log.d("updown", "涓嬭: " + ip + "[" + action.getHandleCmdType().getDesc() + "]>>>" + hexMessage);
         } else if (obj instanceof AgvPackage){
 
             AgvPackage pac = (AgvPackage)obj;
@@ -102,12 +113,37 @@
 
             out.writerIndex(out.readableBytes() - 2);
             out.writeShortLE(pac.getValidCode());
+            // 鐢熸垚鏁翠釜鎶ユ枃鐨勫瓧鑺傛暟缁�
+            byte[] buffer = new byte[out.readableBytes()];
+            out.getBytes(out.readerIndex(), buffer);
 
+            // 灏嗗瓧鑺傛暟缁勮浆鎹负 16 杩涘埗瀛楃涓�
+            String hexMessage = bytesToHex(buffer);
+            Log.d("updown", "涓嬭: " + ip + "[" + pac.getHeader().getProtocolType().getDes() + "]>>>" + hexMessage);
         }
 
 
     }
 
+    private String bytesToHex(byte[] bytes) {
+        StringBuilder sb = new StringBuilder();
+        for (byte b : bytes) {
+            sb.append(String.format("%02X", b));
+        }
+        return sb.toString();
+    }
+
+    // 灏嗗崄鍏繘鍒跺瓧绗︿覆杞崲涓哄瓧鑺傛暟缁�
+    private byte[] hexStringToByteArray(String s) {
+        int len = s.length();
+        byte[] data = new byte[len / 2];
+        for (int i = 0; i < len; i += 2) {
+            data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+                    + Character.digit(s.charAt(i+1), 16));
+        }
+        return data;
+    }
+
 // EE | 11 00 | 01 00 00 00 | 0C AB 12 64 | F0  | 01 00 | 01 01 | 00 00 00 00 | 4C F7
 // #  | len   | uniqueno    | timestamp   | cmd | content                     | crc
 
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 28297aa..bf2e869 100644
--- a/app/src/main/java/com/example/agvcontroller/socket/NettyServerHandler.java
+++ b/app/src/main/java/com/example/agvcontroller/socket/NettyServerHandler.java
@@ -162,11 +162,15 @@
                 if (null != ackType) {
                     AgvPackage ackPac = AckMsgBuilder.ofSuccess(pac, ackType);
                     AGV_F0_DOWN agv_f0_down = (AGV_F0_DOWN) ackPac.getBody().getMessageBody();
+                    Log.d("updown", "涓婅: " + ip + "[鐧诲綍鍖匽>>>" + pac.getSourceHexStr());
                     ctx.writeAndFlush(ackPac);
                 }
+                final int battery = agv_f0_up.getBattery();
+//                pac.getBody().getMessageBody()
                 agvNo = pac.getHeader().getUniqueNo();
                 channelMap.put(clientId, ctx.channel());
-                EventBus.getDefault().post(new AGVCar(clientId,ip,port,agvNo,1));
+                 AGVCar agvCar = new AGVCar(clientId, ip, port, agvNo, 1, battery,0,0,0,0,0,0,0,0,0,0);
+                EventBus.getDefault().post(agvCar);
                 break label;
 
         }
@@ -180,6 +184,7 @@
         }
         return sb.toString();
     }
+
     // 灏嗗崄鍏繘鍒跺瓧绗︿覆杞崲涓哄瓧鑺傛暟缁�
     private byte[] hexStringToByteArray(String s) {
         int len = s.length();
--
Gitblit v1.9.1