app/src/main/java/com/example/agvcontroller/MainActivity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/example/agvcontroller/StartActivity.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/example/agvcontroller/action/ForwardBackAction.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/example/agvcontroller/action/RotatopnLeftRight.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/java/com/example/agvcontroller/protocol/HandleCmdType.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
app/src/main/res/layout/activity_main.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
app/src/main/java/com/example/agvcontroller/MainActivity.java
@@ -5,6 +5,8 @@ import android.content.Context; import android.content.Intent; import android.content.res.ColorStateList; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -15,6 +17,9 @@ import android.view.View; import android.widget.Button; import com.example.agvcontroller.action.ForwardBackAction; import com.example.agvcontroller.action.HandInAction; import com.example.agvcontroller.action.RotatopnLeftRight; import com.example.agvcontroller.protocol.AgvAction; import com.example.agvcontroller.action.ForceSwitchAction; import com.example.agvcontroller.action.HandOutAction; @@ -32,24 +37,29 @@ public class MainActivity extends AppCompatActivity { public static final Map<String, Object> map = new ConcurrentHashMap(); public static final Map<String, Object> car_num = new ConcurrentHashMap(); private RecyclerView recyclerView; private ItemAdapter itemAdapter; private List<Item> itemList; private Vibrator vibrator; private Button stopBtn; // 急停按钮 private Button forceSwitchBtn; // 手自动强制开关 private Button rotatopnRightBtn; // 右旋转 // private Button forceSwitchBtn; // 手自动强制开关 private Button rotatopnLeftBtn; // 左旋转 private Button rotatopnRightBtn; // 右旋转 private Button goForwardBtn; // 前进 private Button goBackwardBtn; // 后退 private Button modelSwitchBtn; // 进入、退出 手动 private Socket socket; private String AgvNo = "12"; SocketManager socketManager; private boolean isDowm = false; private boolean isOpen = false; private int autoVal = 1; private boolean isAuto = true; private boolean isGoForward = false; private boolean isGoBackward = false; private boolean isRotatopnRight = false; private boolean isRotatopnLeft = false; @@ -57,27 +67,43 @@ private Handler handler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { if (isDowm) { if (isGoForward) { String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16); AgvAction agvAction = new AgvAction<>(ForceSwitchAction.class) .setAgvNo("1") AgvAction agvAction = new AgvAction<>(ForwardBackAction.class) .setAgvNo(AgvNo) .setSerialNo(substring) .setVal(1) .bodySync((action) -> action.setPwd((short) 21)); .bodySync((action) -> action.setPwd((short) 10)); nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 handler.sendEmptyMessageDelayed(0, 100); } if (isOpen) { if (isGoBackward) { String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16); AgvAction agvAction = new AgvAction<>(ForceSwitchAction.class) .setAgvNo("12") AgvAction agvAction = new AgvAction<>(ForwardBackAction.class) .setAgvNo(AgvNo) .setSerialNo(substring) .setVal(1) .bodySync((action) -> action.setPwd((short) 21)); .bodySync((action) -> action.setPwd((short) -10)); nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 handler.sendEmptyMessageDelayed(0, 100); } if (isRotatopnRight) { String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16); AgvAction agvAction = new AgvAction<>(RotatopnLeftRight.class) .setAgvNo(AgvNo) .setSerialNo(substring) .setVal(1) .bodySync((action) -> action.setPwd((short) 10)); nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 handler.sendEmptyMessageDelayed(0, 100); } if (isRotatopnLeft) { String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16); AgvAction agvAction = new AgvAction<>(RotatopnLeftRight.class) .setAgvNo(AgvNo) .setSerialNo(substring) .setVal(1) .bodySync((action) -> action.setPwd((short) -10)); nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 handler.sendEmptyMessageDelayed(0, 100); } @@ -96,9 +122,11 @@ // 按钮震动 vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); stopBtn = findViewById(R.id.btn_stop); forceSwitchBtn = findViewById(R.id.btn_force_switch); // forceSwitchBtn = findViewById(R.id.btn_force_switch); goForwardBtn = findViewById(R.id.btn_go_forward); goBackwardBtn = findViewById(R.id.btn_go_backward); rotatopnLeftBtn = findViewById(R.id.btn_go_backward); rotatopnRightBtn = findViewById(R.id.btn_go_forward); modelSwitchBtn = findViewById(R.id.btn_model_switch); Intent intent = getIntent(); @@ -106,23 +134,23 @@ Log.i("message1",clientId); // 强制模式开关 forceSwitchBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (vibrator != null && vibrator.hasVibrator()) { vibrator.vibrate(500); } String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16); AgvAction agvAction = new AgvAction<>(HandOutAction.class) .setAgvNo("12") .setSerialNo(substring) .setVal(1) .bodySync((action) -> action.setPwd((short) 21)); nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 } }); // forceSwitchBtn.setOnClickListener(new View.OnClickListener() { // @Override // public void onClick(View v) { // if (vibrator != null && vibrator.hasVibrator()) { // vibrator.vibrate(500); // } // String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16); // AgvAction agvAction = new AgvAction<>(HandOutAction.class) // .setAgvNo(AgvNo) // .setSerialNo(substring) // .setVal(1) // .bodySync((action) -> action.setPwd((short) 21)); // nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 // } // }); // 强制模式开关 // 手自动模式开关 modelSwitchBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -130,24 +158,37 @@ vibrator.vibrate(500); } String substring = String.valueOf(new SnowflakeIdWorker().nextId()).substring(0,16); AgvAction agvAction = new AgvAction<>(HandOutAction.class) .setAgvNo("12") .setSerialNo(substring) .setVal(1) .bodySync((action) -> action.setPwd((short) 21)); nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 if (isAuto) { AgvAction agvAction = new AgvAction<>(HandInAction.class) .setAgvNo(AgvNo) .setSerialNo(substring) .setVal(autoVal) .bodySync((action) -> action.setPwd((short) 21)); nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 } else { AgvAction agvAction = new AgvAction<>(HandOutAction.class) .setAgvNo(AgvNo) .setSerialNo(substring) .setVal(autoVal) .bodySync((action) -> action.setPwd((short) 21)); nettyServerHandler.sendMessageToClient(clientId, agvAction); // 发送消息到客户端 } boolean result = false; long timestamp = System.currentTimeMillis(); Log.i("substring",substring); while (System.currentTimeMillis() - timestamp < 20000) { while (System.currentTimeMillis() - timestamp < 5000) { Object o = map.get(substring); if (null != o) { result = true; isAuto = !isAuto; map.remove(o); break; } @@ -155,7 +196,15 @@ if (result) { // alert ok 修改按钮样式 名称 modelSwitchBtn.setText("自动模式"); if (isAuto) { modelSwitchBtn.setText("自动模式"); autoVal = 0; // modelSwitchBtn.setBackgroundTintList(ColorStateList.valueOf(Color.RED)); } else { autoVal = 1; modelSwitchBtn.setText("手动模式"); } } else { // throw new TimeoutException("超时"); DialogUtil.showAlertDialog(MainActivity.this, "提示", "请求应答超时!"); @@ -165,6 +214,8 @@ stopBtn.setOnTouchListener(new CarTouchButton()); goForwardBtn.setOnTouchListener(new CarTouchButton()); goBackwardBtn.setOnTouchListener(new CarTouchButton()); rotatopnLeftBtn.setOnTouchListener(new CarTouchButton()); rotatopnRightBtn.setOnTouchListener(new CarTouchButton()); } @@ -173,18 +224,36 @@ @Override public boolean onTouch(View view, MotionEvent motionEvent) { if (view.getId() == R.id.btn_go_forward) { // 前进 if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { isDowm = true; isGoForward = true; handler.sendEmptyMessage(0); } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { isDowm = false; isGoForward = false; } } else if (view.getId() == R.id.btn_go_backward) { // 后退 if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { isOpen = true; isGoBackward = true; handler.sendEmptyMessage(0); } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { isOpen = false; isGoBackward = false; } } else if (view.getId() == R.id.btn_rotatopn_left) { // 左旋转 if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { isRotatopnLeft = true; handler.sendEmptyMessage(0); } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { isRotatopnLeft = false; } } else if (view.getId() == R.id.btn_rotatopn_right) { // 右旋转 if (motionEvent.getAction() == KeyEvent.ACTION_DOWN) { isRotatopnRight = true; handler.sendEmptyMessage(0); } else if (motionEvent.getAction() == KeyEvent.ACTION_UP) { isRotatopnRight = false; } } return false; app/src/main/java/com/example/agvcontroller/StartActivity.java
@@ -52,7 +52,7 @@ } }); socketManager = new SocketManager(); socketManager.startServer(8081); socketManager.startServer(8022); } @Subscribe(threadMode = ThreadMode.MAIN) app/src/main/java/com/example/agvcontroller/action/ForwardBackAction.java
New file @@ -0,0 +1,32 @@ package com.example.agvcontroller.action; import com.example.agvcontroller.protocol.IActionBody; import com.example.agvcontroller.socket.RadixTools; import java.io.Serializable; public class ForwardBackAction implements IActionBody, Serializable { private static final long serialVersionUID = -3250235107705010316L; private Short pwd; @Override public byte[] writeToBytes() { byte[] bytes = RadixTools.shortToByte(pwd); return bytes; } @Override public void readFromBytes(byte[] messageBodyBytes) { } public Short getPwd() { return pwd; } public void setPwd(Short pwd) { this.pwd = pwd; } } app/src/main/java/com/example/agvcontroller/action/RotatopnLeftRight.java
New file @@ -0,0 +1,32 @@ package com.example.agvcontroller.action; import com.example.agvcontroller.protocol.IActionBody; import com.example.agvcontroller.socket.RadixTools; import java.io.Serializable; public class RotatopnLeftRight implements IActionBody, Serializable { private static final long serialVersionUID = -3250235107705010316L; private Short pwd; @Override public byte[] writeToBytes() { byte[] bytes = RadixTools.shortToByte(pwd); return bytes; } @Override public void readFromBytes(byte[] messageBodyBytes) { } public Short getPwd() { return pwd; } public void setPwd(Short pwd) { this.pwd = pwd; } } app/src/main/java/com/example/agvcontroller/protocol/HandleCmdType.java
@@ -2,8 +2,10 @@ import com.example.agvcontroller.action.ForceStopAction; import com.example.agvcontroller.action.ForceSwitchAction; import com.example.agvcontroller.action.ForwardBackAction; import com.example.agvcontroller.action.HandInAction; import com.example.agvcontroller.action.HandOutAction; import com.example.agvcontroller.action.RotatopnLeftRight; import com.example.agvcontroller.action.SingleSwitchAction; import com.example.agvcontroller.action.SingleSwitchRunAction; @@ -20,6 +22,12 @@ SINGLE_SWITCH_RUN(0x8C , "强制单轴点动", SingleSwitchRunAction.class), FORCE_STOP(0xF0, "急停", ForceStopAction.class), FORWARD_BACK(0x81, "点动前进(后退)", ForwardBackAction.class), ROTATOPN_LEFT_RIGHT(0x82, "点动旋转(底盘)", RotatopnLeftRight.class), ; public int cmdCode; app/src/main/res/layout/activity_main.xml
@@ -23,7 +23,7 @@ android:layout_height="100sp" android:layout_margin="30sp" android:text="STOP" android:textSize="20sp" android:textSize="18sp" android:layout_centerInParent="true" android:backgroundTint="#F62727" /> @@ -54,30 +54,30 @@ android:minWidth="10dp" android:backgroundTint="#2196F3" /> <com.google.android.material.button.MaterialButton android:id="@+id/btn_up" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="上升" android:layout_marginRight="20sp" android:layout_centerVertical="true" android:layout_alignParentRight="true" app:cornerRadius="5dp" android:paddingLeft="10dp" android:paddingRight="10dp" android:minWidth="10dp" android:layout_alignLeft="@+id/btn_rotatopn_left" android:layout_alignBottom="@+id/btn_go_backward" android:backgroundTint="#2196F3" /> <!-- <com.google.android.material.button.MaterialButton--> <!-- android:id="@+id/btn_up"--> <!-- android:layout_width="wrap_content"--> <!-- android:layout_height="wrap_content"--> <!-- android:text="上升"--> <!-- android:layout_marginRight="20sp"--> <!-- android:layout_centerVertical="true"--> <!-- android:layout_alignParentRight="true"--> <!-- app:cornerRadius="5dp"--> <!-- android:paddingLeft="10dp"--> <!-- android:paddingRight="10dp"--> <!-- android:minWidth="10dp"--> <!-- android:layout_alignLeft="@+id/btn_rotatopn_left"--> <!-- android:layout_alignBottom="@+id/btn_go_backward"--> <!-- android:backgroundTint="#2196F3" />--> <com.google.android.material.button.MaterialButton android:id="@+id/btn_rotatopn_left" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="左旋转" android:layout_marginRight="20sp" android:layout_marginLeft="20sp" android:layout_centerVertical="true" android:layout_alignParentRight="true" android:layout_alignParentLeft="true" app:cornerRadius="5dp" android:paddingLeft="10dp" android:paddingRight="10dp" @@ -89,46 +89,46 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="右旋转" android:layout_marginLeft="20sp" android:layout_marginRight="20sp" android:layout_centerVertical="true" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" app:cornerRadius="5dp" android:paddingLeft="10dp" android:paddingRight="10dp" android:minWidth="10dp" android:backgroundTint="#2196F3" /> <com.google.android.material.button.MaterialButton android:id="@+id/btn_extend_fork" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="伸叉" android:layout_marginLeft="20sp" android:layout_centerVertical="true" android:layout_alignParentLeft="true" app:cornerRadius="5dp" android:paddingLeft="10dp" android:paddingRight="10dp" android:minWidth="10dp" android:layout_alignLeft="@+id/btn_rotatopn_left" android:layout_alignBottom="@+id/btn_go_forward" android:backgroundTint="#2196F3" /> <!-- <com.google.android.material.button.MaterialButton--> <!-- android:id="@+id/btn_extend_fork"--> <!-- android:layout_width="wrap_content"--> <!-- android:layout_height="wrap_content"--> <!-- android:text="伸叉"--> <!-- android:layout_marginLeft="20sp"--> <!-- android:layout_centerVertical="true"--> <!-- android:layout_alignParentLeft="true"--> <!-- app:cornerRadius="5dp"--> <!-- android:paddingLeft="10dp"--> <!-- android:paddingRight="10dp"--> <!-- android:minWidth="10dp"--> <!-- android:layout_alignLeft="@+id/btn_rotatopn_left"--> <!-- android:layout_alignBottom="@+id/btn_go_forward"--> <!-- android:backgroundTint="#2196F3" />--> <com.google.android.material.button.MaterialButton android:id="@+id/btn_collect_fork" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="收叉" android:layout_marginLeft="20sp" android:layout_centerVertical="true" android:layout_alignParentLeft="true" app:cornerRadius="5dp" android:paddingLeft="10dp" android:paddingRight="10dp" android:minWidth="10dp" android:layout_alignLeft="@+id/btn_rotatopn_left" android:layout_alignBottom="@+id/btn_go_backward" android:backgroundTint="#2196F3" /> <!-- <com.google.android.material.button.MaterialButton--> <!-- android:id="@+id/btn_collect_fork"--> <!-- android:layout_width="wrap_content"--> <!-- android:layout_height="wrap_content"--> <!-- android:text="收叉"--> <!-- android:layout_marginLeft="20sp"--> <!-- android:layout_centerVertical="true"--> <!-- android:layout_alignParentLeft="true"--> <!-- app:cornerRadius="5dp"--> <!-- android:paddingLeft="10dp"--> <!-- android:paddingRight="10dp"--> <!-- android:minWidth="10dp"--> <!-- android:layout_alignLeft="@+id/btn_rotatopn_right"--> <!-- android:layout_alignBottom="@+id/btn_go_backward"--> <!-- android:backgroundTint="#2196F3" />--> </RelativeLayout> <!-- <LinearLayout--> @@ -162,24 +162,7 @@ android:backgroundTint="#2196F3" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center"> <com.google.android.material.button.MaterialButton android:id="@+id/btn_force_switch" android:layout_width="wrap_content" android:layout_height="40dp" android:text="开启强制" android:layout_centerHorizontal="true" app:cornerRadius="5dp" android:paddingLeft="10dp" android:paddingRight="10dp" android:minWidth="10dp" android:textSize="10sp" android:backgroundTint="#2196F3" /> </LinearLayout> <LinearLayout android:layout_width="0dp" @@ -206,10 +189,10 @@ android:layout_weight="1" android:gravity="center"> <com.google.android.material.button.MaterialButton android:id="@+id/btn_function_switch" android:id="@+id/btn_body_switch" android:layout_width="wrap_content" android:layout_height="40dp" android:text="功能切换" android:text="底盘" android:layout_centerHorizontal="true" app:cornerRadius="5dp" android:paddingLeft="10dp" @@ -219,6 +202,63 @@ android:backgroundTint="#2196F3" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center"> <com.google.android.material.button.MaterialButton android:id="@+id/btn_reset" android:layout_width="wrap_content" android:layout_height="40dp" android:text="复位" android:layout_centerHorizontal="true" app:cornerRadius="5dp" android:paddingLeft="10dp" android:paddingRight="10dp" android:minWidth="10dp" android:textSize="10sp" android:backgroundTint="#2196F3" /> </LinearLayout> <!-- <LinearLayout--> <!-- android:layout_width="0dp"--> <!-- android:layout_height="match_parent"--> <!-- android:layout_weight="1"--> <!-- android:gravity="center">--> <!-- <com.google.android.material.button.MaterialButton--> <!-- android:layout_width="wrap_content"--> <!-- android:layout_height="40dp"--> <!-- android:text="功能切换"--> <!-- android:layout_centerHorizontal="true"--> <!-- app:cornerRadius="5dp"--> <!-- android:paddingLeft="10dp"--> <!-- android:paddingRight="10dp"--> <!-- android:minWidth="10dp"--> <!-- android:textSize="10sp"--> <!-- android:backgroundTint="#2196F3" />--> <!-- </LinearLayout>--> <!-- <LinearLayout--> <!-- android:layout_width="0dp"--> <!-- android:layout_height="match_parent"--> <!-- android:layout_weight="1"--> <!-- android:gravity="center">--> <!-- <com.google.android.material.button.MaterialButton--> <!-- android:id="@+id/btn_force_switch"--> <!-- android:layout_width="wrap_content"--> <!-- android:layout_height="40dp"--> <!-- android:text="开启强制"--> <!-- android:layout_centerHorizontal="true"--> <!-- app:cornerRadius="5dp"--> <!-- android:paddingLeft="10dp"--> <!-- android:paddingRight="10dp"--> <!-- android:minWidth="10dp"--> <!-- android:textSize="10sp"--> <!-- android:backgroundTint="#2196F3" />--> <!-- </LinearLayout>--> </LinearLayout>