diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core.tests/src/org/eclipse/cdt/arduino/core/tests/BoardManagerTests.java b/toolchains/arduino/org.eclipse.cdt.arduino.core.tests/src/org/eclipse/cdt/arduino/core/tests/BoardManagerTests.java
index 59c1d2794ec..862f9adfa17 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core.tests/src/org/eclipse/cdt/arduino/core/tests/BoardManagerTests.java
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core.tests/src/org/eclipse/cdt/arduino/core/tests/BoardManagerTests.java
@@ -2,7 +2,7 @@ package org.eclipse.cdt.arduino.core.tests;
import static org.junit.Assert.assertNotNull;
-import org.eclipse.cdt.arduino.core.board.ArduinoBoardManager;
+import org.eclipse.cdt.arduino.core.internal.board.ArduinoBoardManager;
import org.junit.Test;
public class BoardManagerTests {
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/META-INF/MANIFEST.MF b/toolchains/arduino/org.eclipse.cdt.arduino.core/META-INF/MANIFEST.MF
index 6d1bf87fdb9..54bfa1f117b 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/META-INF/MANIFEST.MF
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/META-INF/MANIFEST.MF
@@ -17,11 +17,13 @@ Require-Bundle: org.eclipse.core.runtime,
org.eclipse.remote.serial.core;bundle-version="1.0.0",
com.google.gson;bundle-version="2.2.4",
org.apache.httpcomponents.httpclient;bundle-version="4.3.6",
- org.apache.httpcomponents.httpcore;bundle-version="4.3.3"
+ org.apache.httpcomponents.httpcore;bundle-version="4.3.3",
+ org.apache.commons.compress;bundle-version="1.6.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Bundle-ClassPath: libs/freemarker-2.3.22.jar,
.
-Export-Package: org.eclipse.cdt.arduino.core,
- org.eclipse.cdt.arduino.core.board
+Export-Package: org.eclipse.cdt.arduino.core.internal;x-friends:="org.eclipse.cdt.arduino.ui",
+ org.eclipse.cdt.arduino.core.internal.board;x-friends:="org.eclipse.cdt.arduino.ui",
+ org.eclipse.cdt.arduino.core.internal.build;x-friends:="org.eclipse.cdt.arduino.ui"
Bundle-Localization: plugin
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/plugin.xml b/toolchains/arduino/org.eclipse.cdt.arduino.core/plugin.xml
index 92afaf2727e..a7733318764 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/plugin.xml
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/plugin.xml
@@ -109,7 +109,7 @@
+ service="org.eclipse.cdt.arduino.core.internal.IArduinoRemoteConnection">
+
+
+
+
+
+
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/ArduinoHome.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/ArduinoHome.java
deleted file mode 100644
index 753477783bd..00000000000
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/ArduinoHome.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2015 QNX Software Systems and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * QNX Software Systems - Initial API and implementation
- *******************************************************************************/
-package org.eclipse.cdt.arduino.core;
-
-import java.io.File;
-
-import org.eclipse.core.runtime.Platform;
-
-public class ArduinoHome {
-
- public static final String preferenceName = "arduinoHome"; //$NON-NLS-1$
- private static final String qualifiedName = "org.eclipse.cdt.arduino.ui"; //$NON-NLS-1$
-
- public static File getArduinoHome() {
- String arduinoHome = Platform.getPreferencesService().getString(qualifiedName, preferenceName, getDefault(),
- null);
- if (Platform.getOS().equals(Platform.OS_MACOSX)) {
- arduinoHome += "/Contents/Java"; //$NON-NLS-1$
- }
- return new File(arduinoHome);
- }
-
- public static String getDefault() {
- switch (Platform.getOS()) {
- case Platform.OS_MACOSX:
- return "/Applications/Arduino.app"; //$NON-NLS-1$
- case Platform.OS_WIN32:
- return "C:\\Program Files (x86)\\Arduino"; //$NON-NLS-1$
- default:
- return ""; //$NON-NLS-1$
- }
- }
-
-}
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Board.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Board.java
deleted file mode 100644
index 89831a29e12..00000000000
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Board.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.eclipse.cdt.arduino.core.board;
-
-public class Board {
-
- private String name;
-
- private transient String id;
- private transient Platform platform;
-
- public String getName() {
- return name;
- }
-
- public Board setName(String name) {
- this.name = name;
- return this;
- }
-
- public String getId() {
- return id;
- }
-
- public Board setId(String id) {
- this.id = id;
- return this;
- }
-
- public Platform getPlatform() {
- return platform;
- }
-
- Board setOwners(Platform platform) {
- this.platform = platform;
- return this;
- }
-
- public String getBuildSetting(String setting) {
- String key = id + ".build." + setting; //$NON-NLS-1$
- return platform.getBoardsFile().getProperty(key);
- }
-
- public String getPlatformId() {
- return platform.getArchitecture();
- }
-
- public String getPackageId() {
- return platform.getPackage().getName();
- }
-
-}
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Help.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Help.java
deleted file mode 100644
index d042e56a986..00000000000
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Help.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.eclipse.cdt.arduino.core.board;
-
-public class Help {
-
- private String online;
-
- public String getOnline() {
- return online;
- }
-
-}
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Package.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Package.java
deleted file mode 100644
index 3283f8c116a..00000000000
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Package.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.eclipse.cdt.arduino.core.board;
-
-import java.util.List;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-
-public class Package {
-
- private String name;
- private String maintainer;
- private String websiteURL;
- private String email;
- private Help help;
- private List platforms;
- private List tools;
-
- private transient ArduinoBoardManager manager;
-
- void setOwners(ArduinoBoardManager manager) {
- this.manager = manager;
- for (Platform platform : platforms) {
- platform.setOwners(this);
- }
- }
-
- ArduinoBoardManager getManager() {
- return manager;
- }
-
- public String getName() {
- return name;
- }
-
- public String getMaintainer() {
- return maintainer;
- }
-
- public String getWebsiteURL() {
- return websiteURL;
- }
-
- public String getEmail() {
- return email;
- }
-
- public Help getHelp() {
- return help;
- }
-
- public List getPlatforms() {
- return platforms;
- }
-
- public Platform getPlatform(String architecture) {
- for (Platform platform : platforms) {
- if (platform.getArchitecture().equals(architecture)) {
- return platform;
- }
- }
- return null;
- }
-
- public List getTools() {
- return tools;
- }
-
- public void install(IProgressMonitor monitor) {
-
- }
-
-}
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Platform.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Platform.java
deleted file mode 100644
index 0129d8dd4ba..00000000000
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Platform.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package org.eclipse.cdt.arduino.core.board;
-
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.nio.file.Path;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-public class Platform {
-
- private String name;
- private String architecture;
- private String version;
- private String category;
- private String url;
- private String archiveName;
- private String checksum;
- private String size;
- private List boards;
- private List toolsDependencies;
-
- private transient Package pkg;
- private transient Properties boardsFile;
-
- void setOwners(Package pkg) {
- this.pkg = pkg;
- for (Board board : boards) {
- board.setOwners(this);
- }
- }
-
- public Package getPackage() {
- return pkg;
- }
-
- public String getName() {
- return name;
- }
-
- public String getArchitecture() {
- return architecture;
- }
-
- public String getVersion() {
- return version;
- }
-
- public String getCategory() {
- return category;
- }
-
- public String getUrl() {
- return url;
- }
-
- public String getArchiveName() {
- return archiveName;
- }
-
- public String getChecksum() {
- return checksum;
- }
-
- public String getSize() {
- return size;
- }
-
- public List getBoards() {
- return boards;
- }
-
- public Board getBoard(String boardId) {
- for (Board board : boards) {
- if (boardId.equals(board.getId())) {
- return board;
- }
- }
- return null;
- }
-
- public List getToolsDependencies() {
- return toolsDependencies;
- }
-
- void install() throws IOException {
- Path boardPath = pkg.getManager().getArduinoHome().resolve("hardware").resolve(pkg.getName()) //$NON-NLS-1$
- .resolve(architecture).resolve(version);
- boardsFile = new Properties();
- try (Reader reader = new FileReader(boardPath.toFile())) {
- boardsFile.load(reader);
- }
-
- // Replace the boards with a real ones
- boards = new ArrayList<>();
- for (Map.Entry