fix: decode base64-encoded file content
This commit is contained in:
@@ -1,76 +1,128 @@
|
|||||||
LyoKICogQ29weXJpZ2h0IDIwMDkgQ2VkcmljIFByaXNjYWwKICogCiAqIExpY2Vuc2VkIHVuZGVy
|
/*
|
||||||
IHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwogKiB5b3Ug
|
* Copyright 2009 Cedric Priscal
|
||||||
bWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vu
|
*
|
||||||
c2UuCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKiAKICogaHR0
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAqIAogKiBVbmxlc3MgcmVx
|
* you may not use this file except in compliance with the License.
|
||||||
dWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJl
|
* You may obtain a copy of the License at
|
||||||
CiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB
|
*
|
||||||
UyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBL
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
SU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRo
|
*
|
||||||
ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRp
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
b25zIHVuZGVyIHRoZSBMaWNlbnNlLiAKICovCgpwYWNrYWdlIGFuZHJvaWQuc2VyaWFscG9ydDsK
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
CmltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwppbXBvcnQgamF2YS5pby5GaWxlOwppbXBvcnQgamF2
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
YS5pby5GaWxlUmVhZGVyOwppbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKaW1wb3J0IGphdmEu
|
* See the License for the specific language governing permissions and
|
||||||
aW8uTGluZU51bWJlclJlYWRlcjsKaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKaW1wb3J0IGph
|
* limitations under the License.
|
||||||
dmEudXRpbC5WZWN0b3I7CgpwdWJsaWMgY2xhc3MgU2VyaWFsUG9ydEZpbmRlciB7CgogICAgcHVi
|
*/
|
||||||
bGljIGNsYXNzIERyaXZlciB7CiAgICAgICAgcHVibGljIERyaXZlcihTdHJpbmcgbmFtZSwgU3Ry
|
|
||||||
aW5nIHJvb3QpIHsKICAgICAgICAgICAgbURyaXZlck5hbWUgPSBuYW1lOwogICAgICAgICAgICBt
|
package android.serialport;
|
||||||
RGV2aWNlUm9vdCA9IHJvb3Q7CiAgICAgICAgfQoKICAgICAgICBwcml2YXRlIFN0cmluZyBtRHJp
|
|
||||||
dmVyTmFtZTsKICAgICAgICBwcml2YXRlIFN0cmluZyBtRGV2aWNlUm9vdDsKICAgICAgICBWZWN0
|
import android.util.Log;
|
||||||
b3I8RmlsZT4gbURldmljZXMgPSBudWxsOwoKICAgICAgICBwdWJsaWMgVmVjdG9yPEZpbGU+IGdl
|
import java.io.File;
|
||||||
dERldmljZXMoKSB7CiAgICAgICAgICAgIGlmIChtRGV2aWNlcyA9PSBudWxsKSB7CiAgICAgICAg
|
import java.io.FileReader;
|
||||||
ICAgICAgICBtRGV2aWNlcyA9IG5ldyBWZWN0b3I8RmlsZT4oKTsKICAgICAgICAgICAgICAgIEZp
|
import java.io.IOException;
|
||||||
bGUgZGV2ID0gbmV3IEZpbGUoIi9kZXYiKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
|
import java.io.LineNumberReader;
|
||||||
ICAgRmlsZVtdIGZpbGVzID0gZGV2Lmxpc3RGaWxlcygpOwoKICAgICAgICAgICAgICAgIGlmIChm
|
import java.util.Iterator;
|
||||||
aWxlcyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgaW50IGk7CiAgICAgICAgICAgICAg
|
import java.util.Vector;
|
||||||
ICAgICAgZm9yIChpID0gMDsgaSA8IGZpbGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAg
|
|
||||||
ICAgICAgICAgIGlmIChmaWxlc1tpXS5nZXRBYnNvbHV0ZVBhdGgoKS5zdGFydHNXaXRoKG1EZXZp
|
public class SerialPortFinder {
|
||||||
Y2VSb290KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiRm91bmQg
|
|
||||||
bmV3IGRldmljZTogIiArIGZpbGVzW2ldKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1E
|
public class Driver {
|
||||||
ZXZpY2VzLmFkZChmaWxlc1tpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
|
public Driver(String name, String root) {
|
||||||
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAg
|
mDriverName = name;
|
||||||
cmV0dXJuIG1EZXZpY2VzOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIFN0cmluZyBnZXROYW1l
|
mDeviceRoot = root;
|
||||||
KCkgewogICAgICAgICAgICByZXR1cm4gbURyaXZlck5hbWU7CiAgICAgICAgfQogICAgfQoKICAg
|
}
|
||||||
IHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiU2VyaWFsUG9ydCI7CgogICAgcHJp
|
|
||||||
dmF0ZSBWZWN0b3I8RHJpdmVyPiBtRHJpdmVycyA9IG51bGw7CgogICAgVmVjdG9yPERyaXZlcj4g
|
private String mDriverName;
|
||||||
Z2V0RHJpdmVycygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgaWYgKG1Ecml2ZXJzID09
|
private String mDeviceRoot;
|
||||||
IG51bGwpIHsKICAgICAgICAgICAgbURyaXZlcnMgPSBuZXcgVmVjdG9yPERyaXZlcj4oKTsKICAg
|
Vector<File> mDevices = null;
|
||||||
ICAgICAgICAgTGluZU51bWJlclJlYWRlciByID0gbmV3IExpbmVOdW1iZXJSZWFkZXIobmV3IEZp
|
|
||||||
bGVSZWFkZXIoIi9wcm9jL3R0eS9kcml2ZXJzIikpOwogICAgICAgICAgICBTdHJpbmcgbDsKICAg
|
public Vector<File> getDevices() {
|
||||||
ICAgICAgICAgd2hpbGUgKChsID0gci5yZWFkTGluZSgpKSAhPSBudWxsKSB7CiAgICAgICAgICAg
|
if (mDevices == null) {
|
||||||
ICAgICAvLyBJc3N1ZSAzOgogICAgICAgICAgICAgICAgLy8gU2luY2UgZHJpdmVyIG5hbWUgbWF5
|
mDevices = new Vector<File>();
|
||||||
IGNvbnRhaW4gc3BhY2VzLCB3ZSBkbyBub3QgZXh0cmFjdCBkcml2ZXIgbmFtZSB3aXRoIHNwbGl0
|
File dev = new File("/dev");
|
||||||
KCkKICAgICAgICAgICAgICAgIFN0cmluZyBkcml2ZXJuYW1lID0gbC5zdWJzdHJpbmcoMCwgMHgx
|
|
||||||
NSkudHJpbSgpOwogICAgICAgICAgICAgICAgU3RyaW5nW10gdyA9IGwuc3BsaXQoIiArIik7CiAg
|
File[] files = dev.listFiles();
|
||||||
ICAgICAgICAgICAgICBpZiAoKHcubGVuZ3RoID49IDUpICYmICh3W3cubGVuZ3RoIC0gMV0uZXF1
|
|
||||||
YWxzKCJzZXJpYWwiKSkpIHsKICAgICAgICAgICAgICAgICAgICBMb2cuZChUQUcsICJGb3VuZCBu
|
if (files != null) {
|
||||||
ZXcgZHJpdmVyICIgKyBkcml2ZXJuYW1lICsgIiBvbiAiICsgd1t3Lmxlbmd0aCAtIDRdKTsKICAg
|
int i;
|
||||||
ICAgICAgICAgICAgICAgICBtRHJpdmVycy5hZGQobmV3IERyaXZlcihkcml2ZXJuYW1lLCB3W3cu
|
for (i = 0; i < files.length; i++) {
|
||||||
bGVuZ3RoIC0gNF0pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAg
|
if (files[i].getAbsolutePath().startsWith(mDeviceRoot)) {
|
||||||
ICByLmNsb3NlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBtRHJpdmVyczsKICAgIH0KCiAg
|
Log.d(TAG, "Found new device: " + files[i]);
|
||||||
ICBwdWJsaWMgU3RyaW5nW10gZ2V0QWxsRGV2aWNlcygpIHsKICAgICAgICBWZWN0b3I8U3RyaW5n
|
mDevices.add(files[i]);
|
||||||
PiBkZXZpY2VzID0gbmV3IFZlY3RvcjxTdHJpbmc+KCk7CiAgICAgICAgLy8gUGFyc2UgZWFjaCBk
|
}
|
||||||
cml2ZXIKICAgICAgICBJdGVyYXRvcjxEcml2ZXI+IGl0ZHJpdjsKICAgICAgICB0cnkgewogICAg
|
}
|
||||||
ICAgICAgICBpdGRyaXYgPSBnZXREcml2ZXJzKCkuaXRlcmF0b3IoKTsKICAgICAgICAgICAgd2hp
|
}
|
||||||
bGUgKGl0ZHJpdi5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgIERyaXZlciBkcml2ZXIgPSBp
|
}
|
||||||
dGRyaXYubmV4dCgpOwogICAgICAgICAgICAgICAgSXRlcmF0b3I8RmlsZT4gaXRkZXYgPSBkcml2
|
return mDevices;
|
||||||
ZXIuZ2V0RGV2aWNlcygpLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICAgICB3aGlsZSAoaXRkZXYu
|
}
|
||||||
aGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGRldmljZSA9IGl0ZGV2Lm5l
|
|
||||||
eHQoKS5nZXROYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gU3RyaW5n
|
public String getName() {
|
||||||
LmZvcm1hdCgiJXMgKCVzKSIsIGRldmljZSwgZHJpdmVyLmdldE5hbWUoKSk7CiAgICAgICAgICAg
|
return mDriverName;
|
||||||
ICAgICAgICAgZGV2aWNlcy5hZGQodmFsdWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
|
}
|
||||||
ICB9CiAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewogICAgICAgICAgICBlLnByaW50
|
}
|
||||||
U3RhY2tUcmFjZSgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGV2aWNlcy50b0FycmF5KG5l
|
|
||||||
dyBTdHJpbmdbZGV2aWNlcy5zaXplKCldKTsKICAgIH0KCiAgICBwdWJsaWMgU3RyaW5nW10gZ2V0
|
private static final String TAG = "SerialPort";
|
||||||
QWxsRGV2aWNlc1BhdGgoKSB7CiAgICAgICAgVmVjdG9yPFN0cmluZz4gZGV2aWNlcyA9IG5ldyBW
|
|
||||||
ZWN0b3I8U3RyaW5nPigpOwogICAgICAgIC8vIFBhcnNlIGVhY2ggZHJpdmVyCiAgICAgICAgSXRl
|
private Vector<Driver> mDrivers = null;
|
||||||
cmF0b3I8RHJpdmVyPiBpdGRyaXY7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaXRkcml2ID0g
|
|
||||||
Z2V0RHJpdmVycygpLml0ZXJhdG9yKCk7CiAgICAgICAgICAgIHdoaWxlIChpdGRyaXYuaGFzTmV4
|
Vector<Driver> getDrivers() throws IOException {
|
||||||
dCgpKSB7CiAgICAgICAgICAgICAgICBEcml2ZXIgZHJpdmVyID0gaXRkcml2Lm5leHQoKTsKICAg
|
if (mDrivers == null) {
|
||||||
ICAgICAgICAgICAgIEl0ZXJhdG9yPEZpbGU+IGl0ZGV2ID0gZHJpdmVyLmdldERldmljZXMoKS5p
|
mDrivers = new Vector<Driver>();
|
||||||
dGVyYXRvcigpOwogICAgICAgICAgICAgICAgd2hpbGUgKGl0ZGV2Lmhhc05leHQoKSkgewogICAg
|
LineNumberReader r = new LineNumberReader(new FileReader("/proc/tty/drivers"));
|
||||||
ICAgICAgICAgICAgICAgIFN0cmluZyBkZXZpY2UgPSBpdGRldi5uZXh0KCkuZ2V0QWJzb2x1dGVQ
|
String l;
|
||||||
YXRoKCk7CiAgICAgICAgICAgICAgICAgICAgZGV2aWNlcy5hZGQoZGV2aWNlKTsKICAgICAgICAg
|
while ((l = r.readLine()) != null) {
|
||||||
ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsK
|
// Issue 3:
|
||||||
ICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJu
|
// Since driver name may contain spaces, we do not extract driver name with split()
|
||||||
IGRldmljZXMudG9BcnJheShuZXcgU3RyaW5nW2RldmljZXMuc2l6ZSgpXSk7CiAgICB9Cn0K
|
String drivername = l.substring(0, 0x15).trim();
|
||||||
|
String[] w = l.split(" +");
|
||||||
|
if ((w.length >= 5) && (w[w.length - 1].equals("serial"))) {
|
||||||
|
Log.d(TAG, "Found new driver " + drivername + " on " + w[w.length - 4]);
|
||||||
|
mDrivers.add(new Driver(drivername, w[w.length - 4]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
r.close();
|
||||||
|
}
|
||||||
|
return mDrivers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getAllDevices() {
|
||||||
|
Vector<String> devices = new Vector<String>();
|
||||||
|
// Parse each driver
|
||||||
|
Iterator<Driver> itdriv;
|
||||||
|
try {
|
||||||
|
itdriv = getDrivers().iterator();
|
||||||
|
while (itdriv.hasNext()) {
|
||||||
|
Driver driver = itdriv.next();
|
||||||
|
Iterator<File> itdev = driver.getDevices().iterator();
|
||||||
|
while (itdev.hasNext()) {
|
||||||
|
String device = itdev.next().getName();
|
||||||
|
String value = String.format("%s (%s)", device, driver.getName());
|
||||||
|
devices.add(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return devices.toArray(new String[devices.size()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getAllDevicesPath() {
|
||||||
|
Vector<String> devices = new Vector<String>();
|
||||||
|
// Parse each driver
|
||||||
|
Iterator<Driver> itdriv;
|
||||||
|
try {
|
||||||
|
itdriv = getDrivers().iterator();
|
||||||
|
while (itdriv.hasNext()) {
|
||||||
|
Driver driver = itdriv.next();
|
||||||
|
Iterator<File> itdev = driver.getDevices().iterator();
|
||||||
|
while (itdev.hasNext()) {
|
||||||
|
String device = itdev.next().getAbsolutePath();
|
||||||
|
devices.add(device);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return devices.toArray(new String[devices.size()]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user