Skip to content

Commit 4beaa63

Browse files
author
Me No Dev
committed
Arduino Generic OTA
1 parent 8cc3ff8 commit 4beaa63

File tree

7 files changed

+180
-12
lines changed

7 files changed

+180
-12
lines changed

it.baeyens.arduino.common/src/it/baeyens/arduino/common/Const.java

+6
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ public class Const {
140140
public static final String ENV_KEY_SERIAL_PORT = ENV_KEY_BOARD_START + "SERIAL.PORT";
141141
public static final String ENV_KEY_SERIAL_PORT_FILE = ENV_KEY_BOARD_START + "SERIAL.PORT.FILE";
142142

143+
public static final String ENV_KEY_NETWORK_PORT = ENV_KEY_BOARD_START + "NETWORK.PORT";
144+
public static final String ENV_KEY_NETWORK_PASSWORD = ENV_KEY_BOARD_START + "NETWORK.PASSWORD";
145+
143146
public static final String ENV_KEY_JANTJE_START = "JANTJE.";
144147
public static final String ENV_KEY_JANTJE_WARNING_LEVEL = ENV_KEY_JANTJE_START + "WARNING_LEVEL";
145148
public static final String ENV_KEY_JANTJE_SIZE_COMMAND = ENV_KEY_BOARD_START + "ALT_SIZE_COMMAND";
@@ -150,6 +153,9 @@ public class Const {
150153
public static final String ENV_KEY_JANTJE_COM_PORT = ENV_KEY_JANTJE_START + "COM_PORT";
151154
public static final String ENV_KEY_JANTJE_BOARD_NAME = ENV_KEY_JANTJE_START + "BOARD_NAME";
152155

156+
public static final String ENV_KEY_JANTJE_NETWORK_PORT = ENV_KEY_JANTJE_START + "NETWORK_PORT";
157+
public static final String ENV_KEY_JANTJE_NETWORK_PASSWORD = ENV_KEY_JANTJE_START + "NETWORK_PASSWORD";
158+
153159
public static final String ENV_KEY_JANTJE_ADDITIONAL_COMPILE_OPTIONS = ENV_KEY_JANTJE_START + "EXTRA.COMPILE";
154160
public static final String ENV_KEY_JANTJE_ADDITIONAL_C_COMPILE_OPTIONS = ENV_KEY_JANTJE_START + "EXTRA.C.COMPILE";
155161
public static final String ENV_KEY_JANTJE_ADDITIONAL_CPP_COMPILE_OPTIONS = ENV_KEY_JANTJE_START + "EXTRA.CPP.COMPILE";

it.baeyens.arduino.core/src/cc/arduino/packages/discoverers/NetworkDiscovery.java

+62-1
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,19 @@ private class bonour {
6161

6262
public String port;
6363

64+
public boolean ssh_upload;
65+
public boolean tcp_check;
66+
public boolean auth_upload;
67+
6468
public bonour() {
6569
this.address = ""; //$NON-NLS-1$
6670
this.name = ""; //$NON-NLS-1$
6771
this.board = ""; //$NON-NLS-1$
6872
this.distroversion = ""; //$NON-NLS-1$
6973
this.port = ""; //$NON-NLS-1$
74+
this.ssh_upload = true; //$NON-NLS-1$
75+
this.tcp_check = true; //$NON-NLS-1$
76+
this.auth_upload = false; //$NON-NLS-1$
7077
}
7178

7279
public String getLabel() {
@@ -86,6 +93,53 @@ public NetworkDiscovery() {
8693
this.mappedJmDNSs = new Hashtable<>();
8794
}
8895

96+
private bonour getBoardByName(String name){
97+
if(name == null)
98+
return null;
99+
Iterator<bonour> iterator = myComPorts.iterator();
100+
while (iterator.hasNext()) {
101+
bonour board = iterator.next();
102+
if (name.equals(board.name)) {
103+
return board;
104+
}
105+
}
106+
return null;
107+
}
108+
109+
public boolean isNetworkBoard(String name){
110+
return (getBoardByName(name) != null);
111+
}
112+
113+
public String getAddress(String name){
114+
bonour board = getBoardByName(name);
115+
if(board == null) return null;
116+
return board.address;
117+
}
118+
119+
public String getPort(String name){
120+
bonour board = getBoardByName(name);
121+
if(board == null) return null;
122+
return board.port;
123+
}
124+
125+
public boolean hasSSH(String name){
126+
bonour board = getBoardByName(name);
127+
if(board == null) return false;
128+
return board.ssh_upload;
129+
}
130+
131+
public boolean hasAuth(String name){
132+
bonour board = getBoardByName(name);
133+
if(board == null) return false;
134+
return board.auth_upload;
135+
}
136+
137+
public boolean isTCP(String name){
138+
bonour board = getBoardByName(name);
139+
if(board == null) return false;
140+
return board.tcp_check;
141+
}
142+
89143
public String[] getList() {
90144
String[] ret = new String[this.myComPorts.size()];
91145
int curPort = 0;
@@ -172,6 +226,13 @@ public void serviceResolved(ServiceEvent serviceEvent) {
172226
}
173227
newItem.port = Integer.toString(info.getPort());
174228

229+
String useSSH = info.getPropertyString("ssh_upload");
230+
String checkTCP = info.getPropertyString("tcp_check");
231+
String useAuth = info.getPropertyString("auth_upload");
232+
if(useSSH != null && useSSH.contentEquals("no")) newItem.ssh_upload = false;
233+
if(checkTCP != null && checkTCP.contentEquals("no")) newItem.tcp_check = false;
234+
if(useAuth != null && useAuth.contentEquals("yes")) newItem.auth_upload = true;
235+
175236
synchronized (this) {
176237
removeBoardswithSameAdress(newItem);
177238
this.myComPorts.add(newItem);
@@ -226,4 +287,4 @@ public void inetAddressRemoved(InetAddress address) {
226287
}
227288
}
228289
}
229-
}
290+
}

it.baeyens.arduino.core/src/it/baeyens/arduino/tools/Helpers.java

+4
Original file line numberDiff line numberDiff line change
@@ -587,6 +587,10 @@ private static void setTheEnvironmentVariablesSetTheDefaults(IContributedEnviron
587587
platformPath.removeLastSegments(1).toString());
588588
setBuildEnvironmentVariable(contribEnv, confDesc, "A.SERIAL.PORT", //$NON-NLS-1$
589589
makeEnvironmentVar(Const.ENV_KEY_JANTJE_COM_PORT));
590+
setBuildEnvironmentVariable(contribEnv, confDesc, "A.NETWORK.PORT", //$NON-NLS-1$
591+
makeEnvironmentVar(Const.ENV_KEY_JANTJE_NETWORK_PORT));
592+
setBuildEnvironmentVariable(contribEnv, confDesc, "A.NETWORK.PASSWORD", //$NON-NLS-1$
593+
makeEnvironmentVar(Const.ENV_KEY_JANTJE_NETWORK_PASSWORD));
590594
if (Platform.getOS().equals(Platform.OS_WIN32)) {
591595
setBuildEnvironmentVariable(contribEnv, confDesc, ENV_KEY_JANTJE_MAKE_LOCATION,
592596
ConfigurationPreferences.getPathExtensionPath().toOSString() + '/');
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
package it.baeyens.arduino.tools.uploaders;
2+
3+
import it.baeyens.arduino.common.Const;
4+
5+
import java.io.IOException;
6+
7+
import org.eclipse.cdt.core.CCorePlugin;
8+
import org.eclipse.cdt.core.envvar.EnvironmentVariable;
9+
import org.eclipse.cdt.core.envvar.IContributedEnvironment;
10+
import org.eclipse.cdt.core.envvar.IEnvironmentVariable;
11+
import org.eclipse.cdt.core.envvar.IEnvironmentVariableManager;
12+
import org.eclipse.cdt.core.model.CoreModel;
13+
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
14+
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
15+
import org.eclipse.core.resources.IFile;
16+
import org.eclipse.core.resources.IProject;
17+
import org.eclipse.core.runtime.IProgressMonitor;
18+
import org.eclipse.core.runtime.SubProgressMonitor;
19+
import org.eclipse.ui.console.MessageConsole;
20+
21+
public class GenericNetworkUploader implements IRealUpload {
22+
private String mycConf;
23+
private String myUploadTool;
24+
private MessageConsole myConsole;
25+
private String myAdderss;
26+
private String myPort;
27+
private String myPassword;
28+
29+
/**
30+
* @param project unused here
31+
*/
32+
GenericNetworkUploader(IProject project, String cConf, String UploadTool, MessageConsole Console, String address, String port, String password) {
33+
this.mycConf = cConf;
34+
this.myUploadTool = UploadTool;
35+
this.myConsole = Console;
36+
this.myAdderss = address;
37+
this.myPort = port;
38+
this.myPassword = password;
39+
}
40+
41+
@SuppressWarnings("unused")
42+
@Override
43+
public boolean uploadUsingPreferences(IFile hexFile, IProject project, boolean usingProgrammer, IProgressMonitor monitor) {
44+
IEnvironmentVariableManager envManager = CCorePlugin.getDefault().getBuildEnvironmentManager();
45+
IContributedEnvironment contribEnv = envManager.getContributedEnvironment();
46+
ICProjectDescription prjDesc = CoreModel.getDefault().getProjectDescription(project);
47+
ICConfigurationDescription configurationDescription = prjDesc.getConfigurationByName(this.mycConf);
48+
49+
IEnvironmentVariable var = new EnvironmentVariable(Const.ENV_KEY_SERIAL_PORT, this.myAdderss);
50+
contribEnv.addVariable(var, configurationDescription);
51+
var = new EnvironmentVariable(Const.ENV_KEY_NETWORK_PORT, this.myPort);
52+
contribEnv.addVariable(var, configurationDescription);
53+
var = new EnvironmentVariable(Const.ENV_KEY_NETWORK_PASSWORD, this.myPassword);
54+
contribEnv.addVariable(var, configurationDescription);
55+
56+
String command = "";
57+
try {
58+
command = envManager.getVariable("A.TOOLS." + this.myUploadTool.toUpperCase() + ".UPLOAD.NETWORK_PATTERN", configurationDescription, true).getValue();
59+
} catch (Exception e) {
60+
try {
61+
command = envManager.getVariable("A.TOOLS." + this.myUploadTool.toUpperCase() + ".UPLOAD.PATTERN", configurationDescription, true).getValue();
62+
} catch (Exception er){
63+
return false;
64+
}
65+
}
66+
67+
try {
68+
GenericLocalUploader.RunConsoledCommand(this.myConsole, command, new SubProgressMonitor(monitor, 1));
69+
} catch (IOException e1) {
70+
e1.printStackTrace();
71+
return false;
72+
}
73+
return true;
74+
}
75+
}

it.baeyens.arduino.core/src/it/baeyens/arduino/tools/uploaders/Messages.java

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public class Messages extends NLS {
2424
public static String Upload_sending_sketch;
2525
public static String Upload_sketch_on_yun;
2626
public static String Upload_ssh;
27+
public static String Upload_network_generic;
2728
public static String Upload_starting;
2829
public static String Upload_to;
2930
public static String Upload_uploading;

it.baeyens.arduino.core/src/it/baeyens/arduino/tools/uploaders/UploadSketchWrapper.java

+31-11
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import it.baeyens.arduino.common.Const;
2222
import it.baeyens.arduino.tools.Helpers;
2323
import it.baeyens.arduino.tools.PasswordManager;
24+
import it.baeyens.arduino.ui.Activator;
2425

2526
public class UploadSketchWrapper {
2627

@@ -75,18 +76,37 @@ public void internalUpload(IProject Project, String cConf) {
7576

7677
String host = Helpers.getHostFromComPort(MComPort);
7778

78-
if (host != null) {
79-
this.myHighLevelConsoleStream.println(Messages.Upload_ssh);
80-
PasswordManager pwdManager = new PasswordManager();
81-
if (!pwdManager.setHost(host)) {
82-
Common.log(new Status(IStatus.ERROR, Const.CORE_PLUGIN_ID, Messages.Upload_login_credentials_missing + host));
83-
}
84-
85-
String password = pwdManager.getPassword();
86-
String login = pwdManager.getLogin();
79+
if (host != null && Activator.bonjourDiscovery.isNetworkBoard(host)) {
80+
if(Activator.bonjourDiscovery.hasSSH(host)){
81+
this.myHighLevelConsoleStream.println(Messages.Upload_ssh);
82+
PasswordManager pwdManager = new PasswordManager();
83+
if (!pwdManager.setHost(host)) {
84+
Common.log(new Status(IStatus.ERROR, Const.CORE_PLUGIN_ID, Messages.Upload_login_credentials_missing + host));
85+
}
8786

88-
realUploader = new SSHUpload(this.myHighLevelConsoleStream, this.myOutconsoleStream, this.myErrconsoleStream, password, host, login);
89-
uploadJobName = Const.UPLOAD_SSH;
87+
String password = pwdManager.getPassword();
88+
String login = pwdManager.getLogin();
89+
90+
realUploader = new SSHUpload(this.myHighLevelConsoleStream, this.myOutconsoleStream, this.myErrconsoleStream, password, host, login);
91+
uploadJobName = Const.UPLOAD_SSH;
92+
} else {
93+
myHighLevelConsoleStream.println(Messages.Upload_network_generic);
94+
95+
String addr = Activator.bonjourDiscovery.getAddress(host);
96+
String port = Activator.bonjourDiscovery.getPort(host);
97+
boolean auth = Activator.bonjourDiscovery.hasAuth(host);
98+
99+
String password = "";
100+
if(auth){
101+
PasswordManager pwdManager = new PasswordManager();
102+
if (!pwdManager.setHost(host)) {
103+
Common.log(new Status(IStatus.ERROR, Const.CORE_PLUGIN_ID, Messages.Upload_login_credentials_missing + host));
104+
}
105+
password = pwdManager.getPassword();
106+
}
107+
realUploader = new GenericNetworkUploader(Project, cConf, UpLoadTool, myConsole, addr, port, password);
108+
uploadJobName = UpLoadTool;
109+
}
90110
} else if (UpLoadTool.equalsIgnoreCase(Const.UPLOAD_TOOL_TEENSY)) {
91111
this.myHighLevelConsoleStream.println(Messages.Upload_generic);
92112
realUploader = new GenericLocalUploader(UpLoadTool, Project, cConf, this.myConsole, this.myErrconsoleStream, this.myOutconsoleStream);

it.baeyens.arduino.core/src/it/baeyens/arduino/tools/uploaders/messages.properties

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Upload_Project_nature_unaccesible=Can't access project nature
1818
Upload_sending_sketch=Sending sketch
1919
Upload_sketch_on_yun=Sketch is now on yun: /tmp/sketch.hex
2020
Upload_ssh=using ssh loader
21+
Upload_network_generic=using generic network uploader
2122
Upload_starting=Starting upload
2223
Upload_to=\ to
2324
Upload_uploading=Uploading

0 commit comments

Comments
 (0)