SPAPTools.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. using UnityEngine;
  2. using System.Collections;
  3. using UnityEditor;
  4. using UnityEditor.Callbacks;
  5. using System.IO;
  6. using System.Runtime.InteropServices;
  7. namespace SerialPortUtility
  8. {
  9. public class SPAPTools : EditorWindow
  10. {
  11. //spapmain.cpp
  12. //DLL import
  13. [DllImport("spap", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
  14. static extern int spapDeviceListAvailable();
  15. [DllImport("spap", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
  16. static extern int spapDeviceList(int deviceNum, [MarshalAs(UnmanagedType.LPStr)]System.Text.StringBuilder deviceInfo, int buffer_size);
  17. public SerialPortUtilityPro spapObject = null;
  18. private int deviceNum;
  19. private System.Text.StringBuilder[] deviceString;
  20. private int[] deviceKind;
  21. SPAPTools()
  22. {
  23. this.minSize = new Vector2(300, 300);
  24. this.maxSize = new Vector2(600, 1000);
  25. deviceNum = spapDeviceListAvailable();
  26. deviceString = new System.Text.StringBuilder[deviceNum];
  27. deviceKind = new int[deviceNum];
  28. for (int i = 0; i < deviceNum; i++)
  29. {
  30. deviceString[i] = new System.Text.StringBuilder(1024);
  31. deviceKind[i] = spapDeviceList(i, deviceString[i], 1024);
  32. }
  33. foreach (System.Text.StringBuilder str1 in deviceString)
  34. {
  35. int overlap = -1;
  36. foreach (System.Text.StringBuilder str2 in deviceString)
  37. {
  38. if (str1.ToString().Equals(str2.ToString()))
  39. overlap++;
  40. }
  41. str1.Append("," + overlap.ToString());
  42. }
  43. }
  44. void OnGUI()
  45. {
  46. if (spapObject == null)
  47. {
  48. EditorGUILayout.LabelField("Error!", EditorStyles.boldLabel);
  49. return;
  50. }
  51. EditorGUILayout.HelpBox("When button selected, information is set in this inspector.", MessageType.Info, true);
  52. EditorGUILayout.Space();
  53. EditorGUILayout.LabelField(string.Format("Open Method: {0}",spapObject.OpenMethod.ToString()), EditorStyles.boldLabel);
  54. int foundDevice = 0;
  55. if(deviceNum > 0)
  56. {
  57. EditorGUILayout.BeginVertical(GUI.skin.box);
  58. System.Collections.Generic.List<string> viewSamething = new System.Collections.Generic.List<string>();
  59. for (int i = 0; i < deviceNum; i++) {
  60. int openMethod = (int)spapObject.OpenMethod;
  61. string[] datu = deviceString[i].ToString().Split(',');
  62. string viewButton = "Error";
  63. if (openMethod == deviceKind[i])
  64. {
  65. if (datu[0] == "null")
  66. continue;
  67. switch (spapObject.OpenMethod)
  68. {
  69. case SerialPortUtilityPro.OpenSystem.USB:
  70. viewButton = string.Format("VID:{0} PID:{1} ({2})\n{3}", datu[0], datu[1], datu[3], datu[2]);
  71. if (GUILayout.Button(viewButton))
  72. {
  73. spapObject.VendorID = datu[0];
  74. spapObject.ProductID = datu[1];
  75. spapObject.SerialNumber = datu[2];
  76. spapObject.Skip = int.Parse(datu[4]);
  77. Close();
  78. }
  79. break;
  80. case SerialPortUtilityPro.OpenSystem.PCI:
  81. viewButton = string.Format("VEN:{0} DEV:{1} ({2})", datu[0], datu[1], datu[3]);
  82. if (GUILayout.Button(viewButton))
  83. {
  84. spapObject.VendorID = datu[0];
  85. spapObject.ProductID = datu[1];
  86. spapObject.SerialNumber = "";
  87. spapObject.Skip = int.Parse(datu[4]);
  88. Close();
  89. }
  90. break;
  91. case SerialPortUtilityPro.OpenSystem.BluetoothSSP:
  92. viewButton = string.Format("Bluetooth VirtualCOM ({0})", datu[0]);
  93. if (GUILayout.Button(viewButton))
  94. {
  95. spapObject.VendorID = "";
  96. spapObject.ProductID = "";
  97. spapObject.DeviceName = datu[0];
  98. spapObject.Skip = 0;
  99. Close();
  100. }
  101. break;
  102. }
  103. viewSamething.Add(viewButton);
  104. foundDevice++;
  105. }
  106. }
  107. EditorGUILayout.EndVertical();
  108. }
  109. EditorGUILayout.LabelField(string.Format("Devices found: {0}", foundDevice));
  110. }
  111. /*
  112. [PostProcessBuild]
  113. public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject)
  114. {
  115. }
  116. */
  117. }
  118. }