diff options
author | Adnan Begovic <adnan@cyngn.com> | 2015-11-13 15:28:21 -0800 |
---|---|---|
committer | Adnan Begovic <adnan@cyngn.com> | 2015-11-19 19:07:50 -0800 |
commit | d5fdee9833f8a31d5a80749367f7ada7a3e9a904 (patch) | |
tree | bcdd3532f1704367b72d8c82bb2b9f32b71feb41 /host/migration/src/FastbootCommand.java | |
parent | f7f6d141483f98683e18a45307cc4a92b413e018 (diff) | |
download | vendor_cmsdk-d5fdee9833f8a31d5a80749367f7ada7a3e9a904.zip vendor_cmsdk-d5fdee9833f8a31d5a80749367f7ada7a3e9a904.tar.gz vendor_cmsdk-d5fdee9833f8a31d5a80749367f7ada7a3e9a904.tar.bz2 |
testing: Host side settings migration verifier.
See README for usage.
Change-Id: Ibcbd4ee3882097a8d01ca219aeef0130778436f6
Diffstat (limited to 'host/migration/src/FastbootCommand.java')
-rw-r--r-- | host/migration/src/FastbootCommand.java | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/host/migration/src/FastbootCommand.java b/host/migration/src/FastbootCommand.java new file mode 100644 index 0000000..1132315 --- /dev/null +++ b/host/migration/src/FastbootCommand.java @@ -0,0 +1,157 @@ +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * Created by adnan on 11/17/15. + */ +public class FastbootCommand extends Command { + private static final int MAX_RETRIES = 20; + private static final String[] ADB_REBOOT_BOOTLOADER = new String[] { + "adb", "reboot", "bootloader" + }; + private static final String[] ADB_CHECK_BOOT_COMPLETE = new String[] { + "adb", "shell", "getprop", "sys.boot_completed" + }; + private static final String FASTBOOT_COMMAND = "fastboot"; + private static final String REBOOT = "reboot"; + private static final String DEVICES = "devices"; + private static final String FLASH = "flash"; + + private String[] baseCommand; + private String baseArg; + private String image; + private String targetImage; + + public FastbootCommand(int command, String[] args) { + switch (command) { + case Types.ADB_REBOOT_BOOTLOADER: + baseCommand = ADB_REBOOT_BOOTLOADER; + break; + case Types.FASTBOOT_FLASH: + baseCommand = new String[] { FASTBOOT_COMMAND }; + baseArg = FLASH; + image = args[0]; + targetImage = args[1]; + break; + case Types.FASTBOOT_DEVICES: + baseCommand = new String[] { FASTBOOT_COMMAND }; + baseArg = DEVICES; + break; + case Types.FASTBOOT_REBOOT: + baseCommand = new String[] { FASTBOOT_COMMAND }; + baseArg = REBOOT; + break; + default: + throw new UnsupportedOperationException("Unsupported operation " + command); + } + } + + @Override + public void run() { + List<String> commandList = new ArrayList<String>( + baseCommand.length + 1); + commandList.addAll(Arrays.asList(baseCommand)); + if (baseArg != null && baseArg.length() > 0) { + commandList.add(baseArg); + } + if (image != null &&image.length() > 0) { + commandList.add(image); + } + if (targetImage != null &&targetImage.length() > 0) { + commandList.add(targetImage); + } + String[] commands = commandList.toArray(new String[commandList.size()]); + + if (MigrationTest.DEBUG) { + System.out.println("Using commands: " + Arrays.toString(commands)); + } + try { + final Process process = Runtime.getRuntime().exec(commands); + final InputStream err = process.getErrorStream(); + + // Send error output to stderr. + Thread errThread = new Thread() { + @Override + public void run() { + copy(err, System.err); + } + }; + errThread.setDaemon(true); + errThread.start(); + + BufferedReader in = new BufferedReader( + new InputStreamReader(process.getInputStream())); + String rx = in.readLine(); + if (rx != null) { + if (MigrationTest.DEBUG) { + System.out.println("Received response " + rx); + } + } + + try { + Thread.sleep(10000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + in.close(); + err.close(); + //Gross + if (baseArg != null && baseArg.equals(REBOOT)) { + List<String> secondCommandList = new ArrayList<String>( + ADB_CHECK_BOOT_COMPLETE.length + 1); + secondCommandList.addAll(Arrays.asList(ADB_CHECK_BOOT_COMPLETE)); + String[] secondCommands = secondCommandList.toArray( + new String[secondCommandList.size()]); + if (MigrationTest.DEBUG) { + System.out.println("Using commands: " + Arrays.toString(secondCommands)); + } + Process process2; + BufferedReader in2; + String line2; + for (int i = 1; i < MAX_RETRIES; i++) { + process2 = Runtime.getRuntime().exec(secondCommands); + in2 = new BufferedReader( + new InputStreamReader(process2.getInputStream())); + if ((line2 = in2.readLine()) != null) { + if (line2.equals("1")) { + in2.close(); + process2.destroy(); + try { + System.out.println("Device up detected..."); + Thread.sleep(10000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + break; + } + } + try { + System.out.println("Waiting for device to come up..."); + Thread.sleep(10000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + in2.close(); + process2.destroy(); + } + } + process.destroy(); + } catch (IOException e) { + System.err.println("Error "); + e.printStackTrace(); + } + } + + public final class Types { + public static final int ADB_REBOOT_BOOTLOADER = -1; + public static final int FASTBOOT_FLASH = 0; + public static final int FASTBOOT_DEVICES = 1; + public static final int FASTBOOT_REBOOT = 2; + } +} |