18px;">package org.winplus.serial.utils;
2.
3.import java.io.File;
4.import java.io.FileReader;
5.import java.io.IOException;
6.import java.io.LineNumberReader;
7.import java.util.Iterator;
8.import java.util.Vector;
9.
10.import android.util.Log;
11.
12.public class SerialPortFinder {
13.
14. private static final String TAG = "SerialPort";
15.
16. private Vector mDrivers = null;
17.
18. public class Driver {
19. public Driver(String name, String root) {
20. mDriverName = name;
21. mDeviceRoot = root;
22. }
23.
24. private String mDriverName;
25. private String mDeviceRoot;
26. Vector mDevices = null;
27.
28. public Vector getDevices() {
29. if (mDevices == null) {
30. mDevices = new Vector();
31. File dev = new File("/dev");
32. File[] files = dev.listFiles();
33. int i;
34. for (i = 0; i < files.length; i++) {
35. if (files[i].getAbsolutePath().startsWith(mDeviceRoot)) {
36. Log.d(TAG, "Found new device:
" + files[i]);
37. mDevices.add(files[i]);
38. }
39. }
40. }
41. return mDevices;
42. }
43.
44. public String getName() {
45. return mDriverName;
46. }
47. }
48.
49. Vector getDrivers() throws IOException {
50. if (mDrivers == null) {
51. mDrivers = new Vector();
52. LineNumberReader r = new LineNumberReader(new FileReader(
53. "/proc/tty/drivers"));
54. String l;
55. while ((l = r.readLine()) !
= null) {
56. // Issue 3:
57. // Since driver name may contain spaces, we do not extract
58. // driver name with split()
59. String drivername = l.substring(0, 0x15).trim();
60. String[] w = l.split(" +");
61. if ((w.length >= 5) && (w[w.length - 1].equals("serial"))) {
62. Log.d(TAG, "Found new driver " + drivername + " on "
63. + w[w.length - 4]);
64. mDrivers.add(new Driver(drivername, w[w.length - 4]));
65. }
66. }
67. r.close();
68. }
69. return mDrivers;
70. }
71.
72. public String[] getAllDevices() {
73. Vector devices = new Vector();
74. // Parse each driver
75. Iterator itdriv;
76. try {
77. itdriv = getDrivers().iterator();
78. while (itdriv.hasNext()) {
79. Driver driver = itdriv.next();
80. Iterator itdev = driver.getDevices().iterator();
81. while (itdev.hasNext()) {
82. String device = itdev.next().getName();
83. String value = String.format("%s (%s)", device,
84. driver.getName());
85. devices.add(value);
86. }
87. }
88. } catch (IOException e) {
89. e.printStackTrace();
90. }
91. return devices.toArray(new String[devices.size()]);
92. }
93.
94. public String[] getAllDevicesPath() {
95. Vector devices = new Vector();
96. // Parse each driver
97. Iterator itdriv;
98. try {
99. itdriv = getDrivers().iterator();
100. while (itdriv.hasNext()) {
101. Driver driver = itdriv.next();
102. Iterator itdev = driver.getDevices().iterator();
103. while (itdev.hasNext()) {
104. String device = itdev.next().getAbsolutePath();
105. devices.add(device);
106. }
107. }
108. } catch (IOException e) {
109. e.printStackTrace();
110. }
111. return devices.toArray(new String[devices.size()]);
112. }
113.}
114.