158 lines
4.8 KiB
Java
158 lines
4.8 KiB
Java
/**
|
|
* @file BlynkUpdater.java
|
|
* @author Volodymyr Shymanskyy
|
|
* @license This project is released under the MIT License (MIT)
|
|
* @copyright Copyright (c) 2016 Volodymyr Shymanskyy
|
|
* @date Dec 2016
|
|
* @brief
|
|
*
|
|
* It is not permitted to use this source code for other purposes,
|
|
* except running scripts of original Blynk library.
|
|
*
|
|
*/
|
|
|
|
package com.github.blynk.arduino.tools;
|
|
|
|
import java.io.*;
|
|
import java.util.*;
|
|
import java.lang.Runnable;
|
|
import java.lang.Thread;
|
|
import java.util.stream.Collectors;
|
|
|
|
import processing.app.Editor;
|
|
import processing.app.PreferencesData;
|
|
import processing.app.tools.Tool;
|
|
|
|
import processing.app.BaseNoGui;
|
|
import processing.app.I18n;
|
|
import processing.app.helpers.OSUtils;
|
|
import processing.app.helpers.FileUtils;
|
|
import processing.app.helpers.PreferencesMap;
|
|
import processing.app.Base;
|
|
|
|
import java.awt.*;
|
|
import java.awt.event.*;
|
|
import javax.swing.*;
|
|
import javax.swing.text.DefaultCaret;
|
|
import java.nio.file.*;
|
|
|
|
import processing.app.Theme;
|
|
|
|
import static processing.app.I18n.tr;
|
|
import processing.app.I18n;
|
|
|
|
public class BlynkUsbScript implements Tool {
|
|
private Editor editor;
|
|
|
|
public void init(Editor editor) {
|
|
this.editor = editor;
|
|
}
|
|
|
|
public String getMenuTitle() {
|
|
return "Blynk: Run USB script";
|
|
}
|
|
|
|
private void captureIO(final InputStream src, JTextArea textArea) {
|
|
new Thread(() -> {
|
|
Scanner sc = new Scanner(src);
|
|
while (sc.hasNextLine()) {
|
|
textArea.append(sc.nextLine() + "\n");
|
|
}
|
|
//} catch (IOException e) {
|
|
}).start();
|
|
}
|
|
|
|
public void run() {
|
|
Runnable runnable = () -> {
|
|
try {
|
|
//this.editor.serialMonitor.suspend();
|
|
Font consoleFont = Theme.getFont("console.font");
|
|
Font editorFont = PreferencesData.getFont("editor.font");
|
|
Font font = Theme.scale(new Font(consoleFont.getName(), consoleFont.getStyle(), editorFont.getSize()));
|
|
|
|
String warning = "Ensure that Serial Monitor and Plotter are closed when using this tool.\n" +
|
|
"It uses same port and speed as Serial Monitor\n\n";
|
|
|
|
String serial_port = PreferencesData.get("serial.port");
|
|
String serial_debug_rate = PreferencesData.get("serial.debug_rate");
|
|
String sketchbook_path = PreferencesData.get("sketchbook.path");
|
|
|
|
Path blynk_path = Paths.get(sketchbook_path, "libraries", "Blynk");
|
|
|
|
String full_cmd;
|
|
if (OSUtils.isWindows()) {
|
|
String script = "blynk-ser.bat";
|
|
Path script_path = Paths.get(blynk_path.toString(), "scripts", script);
|
|
|
|
String args = " -c " + serial_port + " -b " + serial_debug_rate;
|
|
full_cmd = "echo." + warning.replace("\n"," & echo.") + " & \"" + script_path.toString() + "\"" + args;
|
|
full_cmd = "cmd /C start \"Blynk\" cmd /C \"" + full_cmd + "\"";
|
|
|
|
//System.err.println(full_cmd);
|
|
|
|
final Process p = Runtime.getRuntime().exec(full_cmd);
|
|
|
|
p.waitFor();
|
|
p.destroy();
|
|
} else {
|
|
|
|
String script = "blynk-ser.sh";
|
|
Path script_path = Paths.get(blynk_path.toString(), "scripts", script);
|
|
|
|
String args = " -c " + serial_port + " -b " + serial_debug_rate;
|
|
full_cmd = script_path.toString() + args;
|
|
|
|
//System.err.println(full_cmd);
|
|
|
|
JTextArea textArea = new JTextArea(warning);
|
|
textArea.setRows(16);
|
|
textArea.setColumns(120);
|
|
textArea.setEditable(false);
|
|
textArea.setLineWrap(true);
|
|
textArea.setFont(font);
|
|
|
|
DefaultCaret caret = (DefaultCaret)textArea.getCaret();
|
|
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
|
|
|
|
textArea.setCaretPosition(textArea.getDocument().getLength());
|
|
|
|
JScrollPane scrollPane = new JScrollPane(textArea);
|
|
//scrollPane.setPreferredSize( new Dimension(textArea.getPreferredSize().width, 500 ) );
|
|
|
|
JFrame frame = new JFrame(script + args);
|
|
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
|
|
frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
|
|
frame.pack();
|
|
frame.setVisible(true);
|
|
|
|
final Process p = Runtime.getRuntime().exec(full_cmd);
|
|
|
|
captureIO(p.getInputStream(), textArea);
|
|
captureIO(p.getErrorStream(), textArea);
|
|
|
|
frame.addWindowListener(new WindowAdapter() {
|
|
@Override
|
|
public void windowClosing(WindowEvent windowEvent) {
|
|
p.destroy();
|
|
}
|
|
});
|
|
|
|
p.waitFor();
|
|
p.destroy();
|
|
frame.setVisible(false);
|
|
frame.dispose();
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
editor.statusError("Blynk USB script failed");
|
|
System.err.println(e);
|
|
//e.printStackTrace(System.err);
|
|
return;
|
|
}
|
|
};
|
|
|
|
Thread thread = new Thread(runnable);
|
|
thread.start();
|
|
}
|
|
}
|