17600099689 1 жил өмнө
parent
commit
5b3ad9313c

+ 31 - 39
Assets/BowArrow/Scripts/ArrowSerialPort.cs

@@ -121,34 +121,35 @@ public class ArrowSerialPort : MonoBehaviour
     {
         Debug.Log($"{PortName} 收到设备信息响应!");
         var check = bytes[1] + bytes[2] + bytes[3] + bytes[4];//校验:命令+长度+数据内容
-        if(check != bytes[5])
-        {
+        if (check != bytes[5])
             LOG("OnDeviceInfoBack 数据校验错误!");
-        }
-        //0x01 HOUYI Pro
-        //0x02 ARTEMIS Pro
-        //0x03 Pistol 1
-        var deviceType = bytes[3];//设备类型
-        switch (deviceType)
+        else
         {
-            case 0x01:
-                UserSettings.ins.selectDevicesName = "HOUYI Pro";
-                break;
-            case 0x02:
-                UserSettings.ins.selectDevicesName = "ARTEMIS Pro";
-                break;
-            case 0x03:
-                UserSettings.ins.selectDevicesName = "Pistol";
-                break;
-        }
-        //0x01 移动手机
-        //0x02 PC电脑
-        //0x03 VR设备
-        var systemType = bytes[4];//系统类型
+            //0x01 HOUYI Pro
+            //0x02 ARTEMIS Pro
+            //0x03 Pistol 1
+            var deviceType = bytes[3];//设备类型
+            switch (deviceType)
+            {
+                case 0x01:
+                    UserSettings.ins.selectDevicesName = "HOUYI Pro";
+                    break;
+                case 0x02:
+                    UserSettings.ins.selectDevicesName = "ARTEMIS Pro";
+                    break;
+                case 0x03:
+                    UserSettings.ins.selectDevicesName = "Pistol 1";
+                    break;
+            }
+            //0x01 移动手机
+            //0x02 PC电脑
+            //0x03 VR设备
+            var systemType = bytes[4];//系统类型
 
-        //刷新界面
-        var setting = FindAnyObjectByType<CustomUIView.BoxUserSettings>();
-        setting?.FlushDeviceSelect();
+            //刷新界面
+            var setting = FindAnyObjectByType<CustomUIView.BoxUserSettings>();
+            setting?.FlushDeviceSelect();
+        }
     }
     
     /// <summary>
@@ -156,17 +157,14 @@ public class ArrowSerialPort : MonoBehaviour
     /// </summary>
     private void OnDeviceShoot(byte[] bytes)
     {
-        Debug.Log($"{PortName} 收到设备射击消息!");
+        LOG($"{PortName} 收到设备射击消息!");
 
         var check = bytes[1] + bytes[2] + bytes[3] + bytes[4];//校验:命令+长度+数据内容
         if (check != bytes[5])
         {
             LOG("OnDeviceShoot 数据校验错误!");
-        }
-
-        var time1 = bytes[3];
-        var time2 = bytes[4];
-
+        }else
+            SerialPortHelper.shoot?.Invoke(bytes);
     }
 
     /// <summary>
@@ -181,14 +179,8 @@ public class ArrowSerialPort : MonoBehaviour
         {
             LOG("OnDeviceButton 数据校验错误!");
         }
-
-        var clickType = bytes[3];//按键类型
-        // 0x01 开机键 - 短按
-        // 0x02 开机键 - 长按(1.5 秒)
-        // 0x03 开机键 - 双击
-        // 0x04 标定键 - 短按
-        // 0x05 标定键 - 长按(1.5 秒)
-        // 0x06 标定键 - 双击
+        else
+            SerialPortHelper.aim?.Invoke(bytes);
     }
     
     #endregion

+ 2 - 48
Assets/BowArrow/Scripts/SerialPortExample.cs

@@ -5,54 +5,6 @@ using System.Collections.Generic;
 using System.IO;
 using Unity.VisualScripting;
 using UnityEngine;
-
-public class SerialPortHelper:MonoBehaviour
-{
-    public static SerialPortExample[] SerialPortExampleGroup;
-    private static ArrowSerialPort arrowPort;
-
-    private static SerialPortHelper _ins;
-
-    public static SerialPortHelper ins
-    {
-        get
-        {
-            if (_ins == null)
-            {
-                var go = new GameObject("SerialPortHelper");
-                _ins = go.AddComponent<SerialPortHelper>();
-                DontDestroyOnLoad(go);
-                SerialPortExampleGroup = FindObjectsOfType<SerialPortExample>();
-            }
-            return _ins;
-        }
-    }
-
-    /// <summary>
-    /// 获取串口实例(0串口和8串口)
-    /// </summary>
-    public SerialPortExample GetPort(int port)
-    {
-        if (port == 0 || port == 8)
-        {
-            foreach (var item in SerialPortExampleGroup)
-            {
-                if (item.name.Contains("com0"))
-                    return item;
-            }
-        }
-        return null;
-    }
-
-    /// <summary>
-    /// 获取串口实例(1串口)
-    /// </summary>
-    public ArrowSerialPort GetPort()
-    {
-        return arrowPort;
-    }
-}
-
 public class SerialPortExample : MonoBehaviour
 {
     public int baudrate = 115200;
@@ -103,6 +55,7 @@ public class SerialPortExample : MonoBehaviour
         //byte[] datas = new byte[8] { 0xAA, 0x08, 0x04, 0x01, 0x00, 0x00, 0x3C, 0xBB };
         //serialPortUtility.Write(datas);
 
+        LOG($"{PortName} 串口打开");
         if (PortName.Contains("/dev/ttyS0"))
         {
             //拉取二维码
@@ -433,6 +386,7 @@ public class SerialPortExample : MonoBehaviour
     /// <param name="dataIndex">数据编号 从1开始</param>
     private void RequestUrl(byte dataIndex)
     {
+        LOG($"请求后台支付URL");
         byte[] datas = new byte[7] { 0xAA, 0x55, 0x04, dataIndex, 0xAA, 0x01, 0xAE };
         datas[6] = GetXor(datas);
         serialPortUtility.Write(datas);

+ 142 - 0
Assets/BowArrow/Scripts/SerialPortHelper.cs

@@ -0,0 +1,142 @@
+using System.Collections.Generic;
+using UnityEngine;
+
+public class SerialPortHelper : MonoBehaviour
+{
+    public static SerialPortExample[] SerialPortExampleGroup;
+    private static ArrowSerialPort arrowPort;
+
+    private static SerialPortHelper _ins;
+
+    public static SerialPortHelper ins
+    {
+        get
+        {
+            if (_ins == null)
+            {
+                var go = new GameObject("SerialPortHelper");
+                _ins = go.AddComponent<SerialPortHelper>();
+                DontDestroyOnLoad(go);
+                SerialPortExampleGroup = FindObjectsOfType<SerialPortExample>();
+            }
+            return _ins;
+        }
+    }
+
+    public static System.Action<byte[]> aim;
+    public static System.Action<byte[]> shoot;
+
+    void Start()
+    {
+        shoot = handleDataBytes;
+        aim = OnDataReceived;
+    }
+    // 0x01 开机键 - 短按
+    // 0x02 开机键 - 长按(1.5 秒)
+    // 0x03 开机键 - 双击
+    // 0x04 标定键 - 短按
+    // 0x05 标定键 - 长按(1.5 秒)
+    // 0x06 标定键 - 双击
+
+    /// <summary>
+    /// 获取串口实例(0串口和8串口)
+    /// </summary>
+    public SerialPortExample GetPort(int port)
+    {
+        if (port == 0 || port == 8)
+        {
+            foreach (var item in SerialPortExampleGroup)
+            {
+                if (item.name.Contains("com0"))
+                    return item;
+            }
+        }
+        return null;
+    }
+
+    /// <summary>
+    /// 获取串口实例(1串口)
+    /// </summary>
+    public ArrowSerialPort GetPort()
+    {
+        return arrowPort;
+    }
+
+    #region 按键
+    /// <summary>
+    /// 
+    /// </summary>
+    /// <param name="bytes">0-起始码 1-序号 2-长度 3-按键类型 4-异或校验 5-结束码</param>
+    public void OnDataReceived(byte[] bytes)
+    {
+        //按键类型
+        //0x01  开机键- 短按
+        //0x02  开机键- 长按(1.5秒)
+        //0x03  开机键- 双击
+        //0x04  标定键- 短按
+        //0x05  标定键- 长按(1.5秒)
+        //0x06  标定键- 双击
+    }
+    #endregion
+
+    #region 射击
+    bool dataGetting = false;
+    int dataGetLen = 0;
+    List<byte> dataBytes = new List<byte>();
+
+    int TwoByteToInt(byte b1, byte b2)
+    {
+        ushort twoByte = (ushort)(b1 * 256 + b2);
+        short shortNum = (short)twoByte;
+        return (int)shortNum;
+    }
+
+    void cacheDataBytes(byte[] bytes, int startIndex)
+    {
+        for (int i = startIndex; i < bytes.Length; i++)
+        {
+            byte b = bytes[i];
+            if (dataBytes.Count < dataGetLen)
+            {
+                dataBytes.Add(b);
+            }
+            else
+            {
+                if (ShootCheck.ins) ShootCheck.ins.OnDataReceived(dataBytes.ToArray());
+                dataGetting = false;
+                dataBytes.Clear();
+                break;
+            }
+        }
+    }
+
+    //0-起始码 1-序号 2-长度值 3-时间1 4--时间2 5--异或校验 6--结束码
+    public void handleDataBytes(byte[] bytes)
+    {
+        if (dataGetting)
+        {
+            cacheDataBytes(bytes, 0);
+        }
+        else
+        {
+            if (bytes.Length >= 5)
+            {
+                int byte3Value = 0; //轴数据识别,1:x轴,2:y轴,3:z轴
+                if (ShootCheck.ins)
+                {
+                    CMD cmd = ShootCheck.ins.cmd;
+                    if (cmd.a == "x") byte3Value = 1;
+                    if (cmd.a == "y") byte3Value = 2;
+                    if (cmd.a == "z") byte3Value = 3;
+                }
+                if (bytes[0] == 255 || bytes[1] == 255 && bytes[2] == byte3Value)
+                {
+                    dataGetting = true;
+                    dataGetLen = TwoByteToInt(bytes[3], bytes[4]);
+                    cacheDataBytes(bytes, 5);
+                }
+            }
+        }
+    }
+    #endregion
+}

+ 11 - 0
Assets/BowArrow/Scripts/SerialPortHelper.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 09b2857378985a546905ee197639e252
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 1 - 1
Assets/SmartBow/Scripts/Views/SettingsViewParts/BoxUserSettings.cs

@@ -9,7 +9,7 @@ namespace CustomUIView
     {
         [SerializeField] Transform boxSelectDevices;
         [SerializeField] GameObject[] boxDevices;
-        readonly string[] SelectDevicesStrs = { "ARTEMIS Pro", "Pistol", "HOUYI Pro" };
+        readonly string[] SelectDevicesStrs = { "ARTEMIS Pro", "Pistol 1", "HOUYI Pro" };
         int selectDevicesIndex = 0; // 用于保存当前选择的设备索引
         // Start is called before the first frame update
         void Start()