|
|
@@ -67,7 +67,8 @@ public class ArrowSerialPort : MonoBehaviour
|
|
|
else if (msg.Equals("OPENED"))
|
|
|
{
|
|
|
SerialPortHelper.ins.OnConnect(arg0.DeviceName);
|
|
|
- RequestDeviceIno();//应用启动 请求一次设备信息
|
|
|
+ //应用启动 间隔十秒请求一次设备信息
|
|
|
+ InvokeRepeating("RequestDeviceIno", 0f, 10f);
|
|
|
LOG($"{PortName} 串口打开成功!");
|
|
|
}
|
|
|
else if (msg.Equals("CLOSED"))//串口断开
|
|
|
@@ -128,13 +129,65 @@ public class ArrowSerialPort : MonoBehaviour
|
|
|
case 0x82://按键消息
|
|
|
OnDeviceButton(bytes);
|
|
|
break;
|
|
|
+ case 0x83://激光控制
|
|
|
+ OnLightChange(bytes);
|
|
|
+ break;
|
|
|
+ case 0x84://弹夹消息(仅手枪)
|
|
|
+ OnMagazinesInfo(bytes);
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
+ bool lightWaitClose = false;
|
|
|
+ public void DelayCloseLight()
|
|
|
+ {
|
|
|
+ if (!lightWaitClose)
|
|
|
+ {
|
|
|
+ LOG("游戏时间结束 延迟关闭激光");
|
|
|
+ Invoke("DoDelayCloseLight", 5f);
|
|
|
+ lightWaitClose = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void CancelDelayCloseLight()
|
|
|
+ {
|
|
|
+ LOG("关闭延迟关闭激光");
|
|
|
+ lightWaitClose = false;
|
|
|
+ CancelInvoke("DoDelayCloseLight");
|
|
|
+ }
|
|
|
+
|
|
|
+ private void DoDelayCloseLight()
|
|
|
+ {
|
|
|
+ RequestLightState(false);
|
|
|
+ }
|
|
|
+
|
|
|
#region APP请求
|
|
|
// 异或校验内容:命令+长度+数据内容
|
|
|
-
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 设置激光状态
|
|
|
+ /// </summary>
|
|
|
+ public void RequestLightState(bool on)
|
|
|
+ {
|
|
|
+ List<byte> data = new List<byte>();
|
|
|
+ data.Add(0xAA);//起始码
|
|
|
+ data.Add(0x83);//命令号
|
|
|
+ data.Add(0x06);//长度
|
|
|
+ data.Add((byte)(on ? 0x01 : 0x00));//长度
|
|
|
+ byte temp = 0;
|
|
|
+ for (int i = 1; i < data.Count; i++)
|
|
|
+ {
|
|
|
+ temp ^= data[i];
|
|
|
+ }
|
|
|
+ data.Add(temp);//异或校验
|
|
|
+ data.Add(0x55);//结束码
|
|
|
+ serialPortUtility?.Write(data.ToArray());
|
|
|
+ LOG($"设置激光状态:{on}!");
|
|
|
+
|
|
|
+ OnLightChange(data.ToArray());
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// app请求设备信息
|
|
|
/// </summary>
|
|
|
@@ -151,6 +204,23 @@ public class ArrowSerialPort : MonoBehaviour
|
|
|
#endregion
|
|
|
|
|
|
#region 返回消息处理
|
|
|
+ /// <summary>
|
|
|
+ /// 弹夹消息
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="bytes"></param>
|
|
|
+ private void OnMagazinesInfo(byte[] bytes)
|
|
|
+ {
|
|
|
+ Debug.Log($"{PortName} 收到弹夹消息!");
|
|
|
+ SerialPortHelper.ins.OnMagazineChange(bytes);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void OnLightChange(byte[] bytes)// 0xAA 0x83 0x06 0x01 0x84 0x55
|
|
|
+ {
|
|
|
+ lightWaitClose = false;
|
|
|
+ Debug.Log($"{PortName} 激光状态变更回包!");
|
|
|
+ var isOn = bytes[3] == 0x01;
|
|
|
+ UserSettings.ins.lightState = isOn;
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 设备信息响应
|