Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDoug Schaefer2015-07-21 15:10:49 +0000
committerDoug Schaefer2015-07-21 15:17:53 +0000
commit05a2939d54de8fb54087e6b9aa86a2d9752b5b07 (patch)
treef2332e8d33f27fa94d5b16122994b70e6e473e45 /toolchains
parentf047a404b0de0580756084b6f244d321d17fa0eb (diff)
downloadorg.eclipse.cdt-05a2939d54de8fb54087e6b9aa86a2d9752b5b07.tar.gz
org.eclipse.cdt-05a2939d54de8fb54087e6b9aa86a2d9752b5b07.tar.xz
org.eclipse.cdt-05a2939d54de8fb54087e6b9aa86a2d9752b5b07.zip
Start restructuring Arduino CDT to use index files.
Diffstat (limited to 'toolchains')
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core.tests/src/org/eclipse/cdt/arduino/core/tests/BoardManagerTests.java16
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/META-INF/MANIFEST.MF3
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/plugin.xml16
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/ArduinoProjectGenerator.java61
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/Board.java41
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/IArduinoBoardManager.java35
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/IArduinoRemoteConnection.java15
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ArduinoBoardManager.java158
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Board.java50
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Help.java11
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Package.java71
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/PackageIndex.java (renamed from toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/PackageIndex.java)19
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Platform.java111
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Tool.java23
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ToolDependency.java21
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ToolSystem.java31
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Activator.java3
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/AvrLanguageSettingsProvider.java12
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/EnvVarSupplier.java26
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Messages.java2
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoBoardManager.java139
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/launch/ArduinoLaunchConfigurationDelegate.java20
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/messages.properties2
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/remote/ArduinoRemoteConnection.java21
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/ArduinoTargetPropertyPage.java14
-rw-r--r--toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/NewArduinoTargetWizardPage.java8
26 files changed, 580 insertions, 349 deletions
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 58f2dc10541..59c1d2794ec 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,26 +2,14 @@ package org.eclipse.cdt.arduino.core.tests;
import static org.junit.Assert.assertNotNull;
-import java.util.concurrent.Semaphore;
-
-import org.eclipse.cdt.arduino.core.IArduinoBoardManager.Handler;
-import org.eclipse.cdt.arduino.core.internal.board.ArduinoBoardManager;
-import org.eclipse.cdt.arduino.core.internal.board.PackageIndex;
+import org.eclipse.cdt.arduino.core.board.ArduinoBoardManager;
import org.junit.Test;
public class BoardManagerTests {
@Test
public void loadPackagesTest() throws Exception {
- Semaphore semaphore = new Semaphore(0);
- new ArduinoBoardManager().getPackageIndex(new Handler<PackageIndex>() {
- @Override
- public void handle(PackageIndex result) {
- assertNotNull(result);
- semaphore.release();
- }
- });
- semaphore.acquire();
+ assertNotNull(ArduinoBoardManager.instance.getPackageIndex());
}
}
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 fae3615a473..6d1bf87fdb9 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
@@ -22,5 +22,6 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Bundle-ClassPath: libs/freemarker-2.3.22.jar,
.
-Export-Package: org.eclipse.cdt.arduino.core
+Export-Package: org.eclipse.cdt.arduino.core,
+ org.eclipse.cdt.arduino.core.board
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 c7e4185a277..92afaf2727e 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/plugin.xml
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/plugin.xml
@@ -49,6 +49,22 @@
resourceFilter="all"
valueType="string">
</option>
+ <option
+ category="org.eclipse.cdt.arduino.optionCategory.board"
+ id="org.eclipse.cdt.arduino.option.platform"
+ isAbstract="false"
+ name="Board Platform"
+ resourceFilter="all"
+ valueType="string">
+ </option>
+ <option
+ category="org.eclipse.cdt.arduino.optionCategory.board"
+ id="org.eclipse.cdt.arduino.option.package"
+ isAbstract="false"
+ name="Board Package"
+ resourceFilter="all"
+ valueType="string">
+ </option>
<optionCategory
id="org.eclipse.cdt.arduino.optionCategory.board"
name="Board Type">
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/ArduinoProjectGenerator.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/ArduinoProjectGenerator.java
index 67bf07500b7..3006ee9d596 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/ArduinoProjectGenerator.java
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/ArduinoProjectGenerator.java
@@ -22,22 +22,16 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
+import org.eclipse.cdt.arduino.core.board.ArduinoBoardManager;
import org.eclipse.cdt.arduino.core.internal.Activator;
import org.eclipse.cdt.arduino.core.internal.ArduinoProjectNature;
import org.eclipse.cdt.arduino.core.internal.Messages;
import org.eclipse.cdt.arduino.core.internal.remote.ArduinoRemoteConnection;
import org.eclipse.cdt.core.CCorePlugin;
-import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
import org.eclipse.cdt.core.settings.model.ICProjectDescription;
-import org.eclipse.cdt.core.settings.model.extension.CConfigurationData;
-import org.eclipse.cdt.managedbuilder.core.BuildException;
-import org.eclipse.cdt.managedbuilder.core.IConfiguration;
-import org.eclipse.cdt.managedbuilder.core.IOption;
-import org.eclipse.cdt.managedbuilder.core.IToolChain;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.cdt.managedbuilder.internal.core.ManagedBuildInfo;
import org.eclipse.cdt.managedbuilder.internal.core.ManagedProject;
-import org.eclipse.cdt.managedbuilder.internal.core.ToolChain;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
@@ -60,9 +54,6 @@ import freemarker.template.TemplateException;
@SuppressWarnings("restriction")
public class ArduinoProjectGenerator {
- public static final String BOARD_OPTION_ID = "org.eclipse.cdt.arduino.option.board"; //$NON-NLS-1$
- public static final String AVR_TOOLCHAIN_ID = "org.eclipse.cdt.arduino.toolChain.avr"; //$NON-NLS-1$
-
private final IProject project;
private IFile sourceFile;
@@ -87,22 +78,23 @@ public class ArduinoProjectGenerator {
ManagedProject mProj = new ManagedProject(cprojDesc);
info.setManagedProject(mProj);
- Board board = null;
+ // TODO make this a preference, the default board
+ String boardId = "uno"; //$NON-NLS-1$
+ String platformId = "avr"; //$NON-NLS-1$
+ String packageId = "arduino"; //$NON-NLS-1$
+
IRemoteServicesManager remoteManager = Activator.getService(IRemoteServicesManager.class);
IRemoteConnectionType connectionType = remoteManager.getConnectionType(ArduinoRemoteConnection.TYPE_ID);
Collection<IRemoteConnection> connections = connectionType.getConnections();
if (!connections.isEmpty()) {
IRemoteConnection firstConnection = connections.iterator().next();
IArduinoRemoteConnection firstArduino = firstConnection.getService(IArduinoRemoteConnection.class);
- board = firstArduino.getBoard();
- }
-
- if (board == null) {
- IArduinoBoardManager boardManager = Activator.getService(IArduinoBoardManager.class);
- board = boardManager.getBoard("uno"); // the default //$NON-NLS-1$
+ boardId = firstArduino.getBoardId();
+ platformId = firstArduino.getPlatformId();
+ packageId = firstArduino.getPackageId();
}
- createBuildConfiguration(cprojDesc, board);
+ ArduinoBoardManager.instance.createBuildConfiguration(cprojDesc, boardId, platformId, packageId);
CCorePlugin.getDefault().setProjectDescription(project, cprojDesc, true, monitor);
// Generate files
@@ -160,39 +152,6 @@ public class ArduinoProjectGenerator {
throw new CoreException(status);
}
- public static ICConfigurationDescription createBuildConfiguration(ICProjectDescription projDesc, Board board)
- throws CoreException {
- ManagedProject managedProject = new ManagedProject(projDesc);
- String configId = ManagedBuildManager.calculateChildId(AVR_TOOLCHAIN_ID, null);
- IToolChain avrToolChain = ManagedBuildManager.getExtensionToolChain(AVR_TOOLCHAIN_ID);
- org.eclipse.cdt.managedbuilder.internal.core.Configuration newConfig = new org.eclipse.cdt.managedbuilder.internal.core.Configuration(
- managedProject, (ToolChain) avrToolChain, configId, board.getId());
- IToolChain newToolChain = newConfig.getToolChain();
- IOption newOption = newToolChain.getOptionBySuperClassId(BOARD_OPTION_ID);
- ManagedBuildManager.setOption(newConfig, newToolChain, newOption, board.getId());
-
- CConfigurationData data = newConfig.getConfigurationData();
- return projDesc.createConfiguration(ManagedBuildManager.CFG_DATA_PROVIDER_ID, data);
- }
-
- public static Board getBoard(IConfiguration configuration) throws CoreException {
- try {
- IToolChain toolChain = configuration.getToolChain();
- IOption boardOption = toolChain.getOptionBySuperClassId(BOARD_OPTION_ID);
- String boardId = boardOption.getStringValue();
-
- IArduinoBoardManager boardManager = Activator.getService(IArduinoBoardManager.class);
- Board board = boardManager.getBoard(boardId);
- if (board == null) {
- board = boardManager.getBoard("uno"); //$NON-NLS-1$
- }
- return board;
- } catch (BuildException e) {
- throw new CoreException(new Status(IStatus.ERROR, Activator.getId(), e.getLocalizedMessage(), e));
- }
-
- }
-
public IFile getSourceFile() {
return sourceFile;
}
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/Board.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/Board.java
deleted file mode 100644
index d072d6c0a72..00000000000
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/Board.java
+++ /dev/null
@@ -1,41 +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.util.Properties;
-
-public class Board {
-
- private final String id;
- private final Properties properties;
-
- public Board(String key, Properties properties) {
- this.id = key;
- this.properties = properties;
- }
-
- public String getId() {
- return id;
- }
-
- public String getProperty(String localKey) {
- return properties.getProperty(id + '.' + localKey);
- }
-
- public String getName() {
- return getProperty("name"); //$NON-NLS-1$
- }
-
- public String getMCU() {
- return getProperty("build.mcu"); //$NON-NLS-1$
- }
-
-}
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/IArduinoBoardManager.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/IArduinoBoardManager.java
deleted file mode 100644
index ecba57895f8..00000000000
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/IArduinoBoardManager.java
+++ /dev/null
@@ -1,35 +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.util.Collection;
-
-/**
- * Interface into the board package data.
- */
-public interface IArduinoBoardManager {
-
- /**
- * Many of the calls into the board manager require reaching out to the web.
- * In order to not block UI, these calls are asynchronous. This handler
- * interface is how the results of the call are returned.
- *
- * @param <T>
- */
- public interface Handler<T> {
- void handle(T result);
- }
-
- Board getBoard(String id);
-
- Collection<Board> getBoards();
-
-}
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/IArduinoRemoteConnection.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/IArduinoRemoteConnection.java
index f76577a1bcb..535f1ed4d4e 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/IArduinoRemoteConnection.java
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/IArduinoRemoteConnection.java
@@ -23,6 +23,8 @@ public interface IArduinoRemoteConnection extends IRemoteConnection.Service {
final String TYPE_ID = "org.eclipse.cdt.arduino.core.connectionType"; //$NON-NLS-1$
final String PORT_NAME = "ardiuno.portname"; //$NON-NLS-1$
final String BOARD_ID = "arduino.board"; //$NON-NLS-1$
+ final String PLATFORM_ID = "arduino.platform"; //$NON-NLS-1$
+ final String PACKAGE_ID = "arduino.package"; //$NON-NLS-1$
/**
* Return the serial port name.
@@ -31,13 +33,12 @@ public interface IArduinoRemoteConnection extends IRemoteConnection.Service {
*/
String getPortName();
- /**
- * Get the board type at the end of this connection.
- *
- * @return Board
- */
- Board getBoard();
-
+ String getBoardId();
+
+ String getPlatformId();
+
+ String getPackageId();
+
void pause();
void resume();
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ArduinoBoardManager.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ArduinoBoardManager.java
new file mode 100644
index 00000000000..3b724095a5c
--- /dev/null
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ArduinoBoardManager.java
@@ -0,0 +1,158 @@
+/*******************************************************************************
+ * 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.board;
+
+import java.io.FileReader;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.eclipse.cdt.arduino.core.internal.Activator;
+import org.eclipse.cdt.arduino.core.internal.Messages;
+import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
+import org.eclipse.cdt.core.settings.model.ICProjectDescription;
+import org.eclipse.cdt.core.settings.model.extension.CConfigurationData;
+import org.eclipse.cdt.managedbuilder.core.BuildException;
+import org.eclipse.cdt.managedbuilder.core.IConfiguration;
+import org.eclipse.cdt.managedbuilder.core.IOption;
+import org.eclipse.cdt.managedbuilder.core.IToolChain;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
+import org.eclipse.cdt.managedbuilder.internal.core.ManagedProject;
+import org.eclipse.cdt.managedbuilder.internal.core.ToolChain;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+
+import com.google.gson.Gson;
+
+// Closeable isn't API yet but it's recommended.
+@SuppressWarnings("restriction")
+public class ArduinoBoardManager {
+
+ public static final ArduinoBoardManager instance = new ArduinoBoardManager();
+
+ // Build tool ids
+ public static final String BOARD_OPTION_ID = "org.eclipse.cdt.arduino.option.board"; //$NON-NLS-1$
+ public static final String PLATFORM_OPTION_ID = "org.eclipse.cdt.arduino.option.platform"; //$NON-NLS-1$
+ public static final String PACKAGE_OPTION_ID = "org.eclipse.cdt.arduino.option.package"; //$NON-NLS-1$
+ public static final String AVR_TOOLCHAIN_ID = "org.eclipse.cdt.arduino.toolChain.avr"; //$NON-NLS-1$
+
+ // TODO make this a preference
+ private Path arduinoHome = Paths.get(System.getProperty("user.home"), ".arduinocdt"); //$NON-NLS-1$ //$NON-NLS-2$
+ private Path packageIndexPath;
+ private PackageIndex packageIndex;
+
+ public ArduinoBoardManager() {
+ new Job(Messages.ArduinoBoardManager_0) {
+ protected IStatus run(IProgressMonitor monitor) {
+ try (CloseableHttpClient client = HttpClients.createDefault()) {
+ HttpGet get = new HttpGet("http://downloads.arduino.cc/packages/package_index.json"); //$NON-NLS-1$
+ try (CloseableHttpResponse response = client.execute(get)) {
+ if (response.getStatusLine().getStatusCode() >= 400) {
+ return new Status(IStatus.ERROR, Activator.getId(),
+ response.getStatusLine().getReasonPhrase());
+ } else {
+ HttpEntity entity = response.getEntity();
+ if (entity == null) {
+ return new Status(IStatus.ERROR, Activator.getId(), Messages.ArduinoBoardManager_1);
+ }
+ Files.createDirectories(arduinoHome);
+ packageIndexPath = arduinoHome.resolve("package_index.json"); //$NON-NLS-1$
+ Files.copy(entity.getContent(), packageIndexPath, StandardCopyOption.REPLACE_EXISTING);
+ }
+ }
+ } catch (IOException e) {
+ return new Status(IStatus.ERROR, Activator.getId(), e.getLocalizedMessage(), e);
+ }
+ return Status.OK_STATUS;
+ }
+ }.schedule();
+ }
+
+ Path getArduinoHome() {
+ return arduinoHome;
+ }
+
+ public PackageIndex getPackageIndex() throws IOException {
+ if (packageIndex == null) {
+ try (FileReader reader = new FileReader(packageIndexPath.toFile())) {
+ packageIndex = new Gson().fromJson(reader, PackageIndex.class);
+ }
+ }
+ return packageIndex;
+ }
+
+ public ICConfigurationDescription createBuildConfiguration(ICProjectDescription projDesc, String boardId,
+ String platformId, String packageId) throws CoreException {
+ Board board = packageIndex.getPackage(packageId).getPlatform(platformId).getBoard(boardId);
+ ManagedProject managedProject = new ManagedProject(projDesc);
+ // TODO find toolchain based on package (os), platform (arch).
+ String configId = ManagedBuildManager.calculateChildId(ArduinoBoardManager.AVR_TOOLCHAIN_ID, null);
+ IToolChain avrToolChain = ManagedBuildManager.getExtensionToolChain(ArduinoBoardManager.AVR_TOOLCHAIN_ID);
+
+ org.eclipse.cdt.managedbuilder.internal.core.Configuration newConfig = new org.eclipse.cdt.managedbuilder.internal.core.Configuration(
+ managedProject, (ToolChain) avrToolChain, configId, board.getName());
+
+ IToolChain newToolChain = newConfig.getToolChain();
+ IOption boardOption = newToolChain.getOptionBySuperClassId(BOARD_OPTION_ID);
+ ManagedBuildManager.setOption(newConfig, newToolChain, boardOption, boardId);
+ IOption platformOption = newToolChain.getOptionBySuperClassId(PLATFORM_OPTION_ID);
+ ManagedBuildManager.setOption(newConfig, newToolChain, platformOption, platformId);
+ IOption packageOption = newToolChain.getOptionBySuperClassId(PACKAGE_OPTION_ID);
+ ManagedBuildManager.setOption(newConfig, newToolChain, packageOption, packageId);
+
+ CConfigurationData data = newConfig.getConfigurationData();
+ return projDesc.createConfiguration(ManagedBuildManager.CFG_DATA_PROVIDER_ID, data);
+ }
+
+ public Board getBoard(String boardId, String platformId, String packageId) {
+ return packageIndex.getPackage(packageId).getPlatform(platformId).getBoard(boardId);
+ }
+
+ public Board getBoard(IConfiguration configuration) throws CoreException {
+ try {
+ IToolChain toolChain = configuration.getToolChain();
+ IOption boardOption = toolChain.getOptionBySuperClassId(BOARD_OPTION_ID);
+ String boardId = boardOption.getStringValue();
+ IOption platformOption = toolChain.getOptionBySuperClassId(PLATFORM_OPTION_ID);
+ String platformId = platformOption.getStringValue();
+ IOption packageOption = toolChain.getOptionBySuperClassId(PACKAGE_OPTION_ID);
+ String packageId = packageOption.getStringValue();
+
+ return getBoard(boardId, platformId, packageId);
+ } catch (BuildException e) {
+ throw new CoreException(new Status(IStatus.ERROR, Activator.getId(), e.getLocalizedMessage(), e));
+ }
+
+ }
+
+ public List<Board> getBoards() {
+ List<Board> boards = new ArrayList<>();
+ for (Package pkg : packageIndex.getPackages()) {
+ for (Platform platform : pkg.getPlatforms()) {
+ boards.addAll(platform.getBoards());
+ }
+ }
+ return boards;
+ }
+
+}
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
new file mode 100644
index 00000000000..89831a29e12
--- /dev/null
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Board.java
@@ -0,0 +1,50 @@
+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
new file mode 100644
index 00000000000..d042e56a986
--- /dev/null
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Help.java
@@ -0,0 +1,11 @@
+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
new file mode 100644
index 00000000000..3283f8c116a
--- /dev/null
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Package.java
@@ -0,0 +1,71 @@
+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<Platform> platforms;
+ private List<Tool> 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<Platform> getPlatforms() {
+ return platforms;
+ }
+
+ public Platform getPlatform(String architecture) {
+ for (Platform platform : platforms) {
+ if (platform.getArchitecture().equals(architecture)) {
+ return platform;
+ }
+ }
+ return null;
+ }
+
+ public List<Tool> getTools() {
+ return tools;
+ }
+
+ public void install(IProgressMonitor monitor) {
+
+ }
+
+}
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/PackageIndex.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/PackageIndex.java
index cdce67d491c..1997123c16d 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/PackageIndex.java
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/PackageIndex.java
@@ -5,8 +5,25 @@
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
-package org.eclipse.cdt.arduino.core.internal.board;
+package org.eclipse.cdt.arduino.core.board;
+
+import java.util.List;
public class PackageIndex {
+ private List<Package> packages;
+
+ public List<Package> getPackages() {
+ return packages;
+ }
+
+ public Package getPackage(String packageName) {
+ for (Package pkg : packages) {
+ if (pkg.getName().equals(packageName)) {
+ return pkg;
+ }
+ }
+ return null;
+ }
+
}
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
new file mode 100644
index 00000000000..0129d8dd4ba
--- /dev/null
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Platform.java
@@ -0,0 +1,111 @@
+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<Board> boards;
+ private List<ToolDependency> 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<Board> getBoards() {
+ return boards;
+ }
+
+ public Board getBoard(String boardId) {
+ for (Board board : boards) {
+ if (boardId.equals(board.getId())) {
+ return board;
+ }
+ }
+ return null;
+ }
+
+ public List<ToolDependency> 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<Object, Object> entry : boardsFile.entrySet()) {
+ String key = (String) entry.getKey();
+ String[] fragments = key.split("."); //$NON-NLS-1$
+ if (fragments.length == 2 && "name".equals(fragments[1])) { //$NON-NLS-1$
+ boards.add(new Board().setId(fragments[0]).setName((String) entry.getValue()).setOwners(this));
+ }
+ }
+ }
+
+ Properties getBoardsFile() {
+ return boardsFile;
+ }
+
+}
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Tool.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Tool.java
new file mode 100644
index 00000000000..5de4a364645
--- /dev/null
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/Tool.java
@@ -0,0 +1,23 @@
+package org.eclipse.cdt.arduino.core.board;
+
+import java.util.List;
+
+public class Tool {
+
+ private String name;
+ private String version;
+ private List<ToolSystem> systems;
+
+ public String getName() {
+ return name;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public List<ToolSystem> getSystems() {
+ return systems;
+ }
+
+}
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ToolDependency.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ToolDependency.java
new file mode 100644
index 00000000000..2a3ffc41551
--- /dev/null
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ToolDependency.java
@@ -0,0 +1,21 @@
+package org.eclipse.cdt.arduino.core.board;
+
+public class ToolDependency {
+
+ private String packager;
+ private String name;
+ private String version;
+
+ public String getPackager() {
+ return packager;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+}
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ToolSystem.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ToolSystem.java
new file mode 100644
index 00000000000..018f2b29ffc
--- /dev/null
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/board/ToolSystem.java
@@ -0,0 +1,31 @@
+package org.eclipse.cdt.arduino.core.board;
+
+public class ToolSystem {
+
+ private String host;
+ private String archiveFileName;
+ private String url;
+ private String checksum;
+ private String size;
+
+ public String getHost() {
+ return host;
+ }
+
+ public String getArchiveFileName() {
+ return archiveFileName;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public String getChecksum() {
+ return checksum;
+ }
+
+ public String getSize() {
+ return size;
+ }
+
+}
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Activator.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Activator.java
index 9fadccb1695..b373743ed32 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Activator.java
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Activator.java
@@ -10,8 +10,6 @@
*******************************************************************************/
package org.eclipse.cdt.arduino.core.internal;
-import org.eclipse.cdt.arduino.core.IArduinoBoardManager;
-import org.eclipse.cdt.arduino.core.internal.board.ArduinoBoardManager;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Plugin;
@@ -45,7 +43,6 @@ public class Activator extends Plugin {
public void start(BundleContext bundleContext) throws Exception {
plugin = this;
- bundleContext.registerService(IArduinoBoardManager.class, new ArduinoBoardManager(), null);
}
public void stop(BundleContext bundleContext) throws Exception {
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/AvrLanguageSettingsProvider.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/AvrLanguageSettingsProvider.java
index 6d3c732fa4f..7c050c1b08f 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/AvrLanguageSettingsProvider.java
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/AvrLanguageSettingsProvider.java
@@ -14,8 +14,8 @@ import java.io.File;
import java.util.List;
import org.eclipse.cdt.arduino.core.ArduinoHome;
-import org.eclipse.cdt.arduino.core.ArduinoProjectGenerator;
-import org.eclipse.cdt.arduino.core.Board;
+import org.eclipse.cdt.arduino.core.board.ArduinoBoardManager;
+import org.eclipse.cdt.arduino.core.board.Board;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector;
@@ -35,8 +35,8 @@ public class AvrLanguageSettingsProvider extends GCCBuiltinSpecsDetector {
try {
IConfiguration config = ManagedBuildManager.getConfigurationForDescription(currentCfgDescription);
- Board board = ArduinoProjectGenerator.getBoard(config);
- String mcu = board.getMCU();
+ Board board = ArduinoBoardManager.instance.getBoard(config);
+ String mcu = board.getBuildSetting("mcu"); //$NON-NLS-1$
if (mcu != null) {
opts += " -mmcu=" + mcu; //$NON-NLS-1$
}
@@ -46,7 +46,7 @@ public class AvrLanguageSettingsProvider extends GCCBuiltinSpecsDetector {
return opts;
}
-
+
@Override
protected List<String> parseOptions(String line) {
if (Platform.getOS().equals(Platform.OS_WIN32)) {
@@ -58,7 +58,7 @@ public class AvrLanguageSettingsProvider extends GCCBuiltinSpecsDetector {
return super.parseOptions(line);
}
-
+
@Override
public AvrLanguageSettingsProvider cloneShallow() throws CloneNotSupportedException {
return (AvrLanguageSettingsProvider) super.cloneShallow();
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/EnvVarSupplier.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/EnvVarSupplier.java
index 9d26be64b74..23a7dd9a026 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/EnvVarSupplier.java
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/EnvVarSupplier.java
@@ -15,13 +15,10 @@ import java.util.ArrayList;
import java.util.List;
import org.eclipse.cdt.arduino.core.ArduinoHome;
-import org.eclipse.cdt.arduino.core.ArduinoProjectGenerator;
-import org.eclipse.cdt.arduino.core.Board;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.envvar.IBuildEnvironmentVariable;
import org.eclipse.cdt.managedbuilder.envvar.IConfigurationEnvironmentVariableSupplier;
import org.eclipse.cdt.managedbuilder.envvar.IEnvironmentVariableProvider;
-import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.Platform;
public class EnvVarSupplier implements IConfigurationEnvironmentVariableSupplier {
@@ -31,7 +28,6 @@ public class EnvVarSupplier implements IConfigurationEnvironmentVariableSupplier
private EnvVar path;
private static final String OUTPUT_DIR = "OUTPUT_DIR"; //$NON-NLS-1$
- private static final String BOARD = "BOARD"; //$NON-NLS-1$
private static final class EnvVar implements IBuildEnvironmentVariable {
String name;
@@ -89,22 +85,6 @@ public class EnvVarSupplier implements IConfigurationEnvironmentVariableSupplier
return outputDir;
}
- private IBuildEnvironmentVariable getBoard(IConfiguration configuration) {
- try {
- Board board = ArduinoProjectGenerator.getBoard(configuration);
- if (board == null)
- return null;
-
- EnvVar boardVar = new EnvVar();
- boardVar.name = BOARD;
- boardVar.value = board.getId();
- return boardVar;
- } catch (CoreException e) {
- Activator.getPlugin().getLog().log(e.getStatus());
- return null;
- }
- }
-
@Override
public IBuildEnvironmentVariable getVariable(String variableName, IConfiguration configuration,
IEnvironmentVariableProvider provider) {
@@ -116,8 +96,6 @@ public class EnvVarSupplier implements IConfigurationEnvironmentVariableSupplier
return arduinoLibs;
} else if (variableName.equals(OUTPUT_DIR)) {
return getOutputDir(configuration);
- } else if (variableName.equals(BOARD)) {
- return getBoard(configuration);
}
return null;
}
@@ -133,10 +111,6 @@ public class EnvVarSupplier implements IConfigurationEnvironmentVariableSupplier
if (configuration != null) {
vars.add(getOutputDir(configuration));
-
- IBuildEnvironmentVariable boardVar = getBoard(configuration);
- if (boardVar != null)
- vars.add(boardVar);
}
return vars.toArray(new IBuildEnvironmentVariable[vars.size()]);
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Messages.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Messages.java
index be6883bf203..78de895b78f 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Messages.java
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/Messages.java
@@ -14,6 +14,8 @@ import org.eclipse.osgi.util.NLS;
public class Messages extends NLS {
private static final String BUNDLE_NAME = "org.eclipse.cdt.arduino.core.internal.messages"; //$NON-NLS-1$
+ public static String ArduinoBoardManager_0;
+ public static String ArduinoBoardManager_1;
public static String ArduinoLaunchConfigurationDelegate_0;
public static String ArduinoLaunchConfigurationDelegate_1;
public static String ArduinoLaunchConfigurationDelegate_2;
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoBoardManager.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoBoardManager.java
deleted file mode 100644
index b36dbf7c41a..00000000000
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/board/ArduinoBoardManager.java
+++ /dev/null
@@ -1,139 +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.internal.board;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.nio.file.StandardCopyOption;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-import org.apache.http.HttpEntity;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.eclipse.cdt.arduino.core.ArduinoHome;
-import org.eclipse.cdt.arduino.core.Board;
-import org.eclipse.cdt.arduino.core.IArduinoBoardManager;
-import org.eclipse.cdt.arduino.core.internal.Activator;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-
-import com.google.gson.Gson;
-
-public class ArduinoBoardManager implements IArduinoBoardManager {
-
- private Map<String, Board> boards;
-
- // TODO make this a preference
- private Path arduinoHome = Paths.get(System.getProperty("user.home"), ".arduinocdt"); //$NON-NLS-1$ //$NON-NLS-2$
-
- public void getPackageIndex(final Handler<PackageIndex> handler) {
- new Job("Fetching package index") {
- // Closeable isn't API yet but it's recommended.
- @SuppressWarnings("restriction")
- protected IStatus run(IProgressMonitor monitor) {
- try (CloseableHttpClient client = HttpClients.createDefault()) {
- HttpGet get = new HttpGet("http://downloads.arduino.cc/packages/package_index.json"); //$NON-NLS-1$
- try (CloseableHttpResponse response = client.execute(get)) {
- if (response.getStatusLine().getStatusCode() >= 400) {
- return new Status(IStatus.ERROR, Activator.getId(),
- response.getStatusLine().getReasonPhrase());
- } else {
- HttpEntity entity = response.getEntity();
- if (entity == null) {
- return new Status(IStatus.ERROR, Activator.getId(),
- "Package index missing from response");
- }
- Files.createDirectories(arduinoHome);
- Path indexPath = arduinoHome.resolve("package_index.json"); //$NON-NLS-1$
- Files.copy(entity.getContent(), indexPath, StandardCopyOption.REPLACE_EXISTING);
- try (FileReader reader = new FileReader(indexPath.toFile())) {
- PackageIndex index = new Gson().fromJson(reader, PackageIndex.class);
- handler.handle(index);
- }
- }
- }
- } catch (IOException e) {
- return new Status(IStatus.ERROR, Activator.getId(), e.getLocalizedMessage(), e);
- }
- return Status.OK_STATUS;
- }
- }.schedule();
- }
-
- @Override
- public Board getBoard(String id) {
- init();
- return boards.get(id);
- }
-
- @Override
- public Collection<Board> getBoards() {
- init();
- List<Board> sortedBoards = new ArrayList<Board>(boards.values());
- Collections.sort(sortedBoards, new Comparator<Board>() {
- @Override
- public int compare(Board arg0, Board arg1) {
- return arg0.getName().compareTo(arg1.getName());
- }
- });
- return sortedBoards;
- }
-
- private void init() {
- if (boards != null)
- return;
- boards = new HashMap<>();
- File home = ArduinoHome.getArduinoHome();
- if (!home.isDirectory())
- return;
-
- File archRoot = new File(home, "hardware/arduino"); //$NON-NLS-1$
- for (File archDir : archRoot.listFiles()) {
- File boardFile = new File(archDir, "boards.txt"); //$NON-NLS-1$
- loadBoardFile(archDir.getName(), boardFile);
- }
- }
-
- private void loadBoardFile(String arch, File boardFile) {
- try {
- Properties boardProps = new Properties();
- boardProps.load(new FileInputStream(boardFile));
- Enumeration<?> i = boardProps.propertyNames();
- while (i.hasMoreElements()) {
- String propertyName = (String) i.nextElement();
- String[] names = propertyName.split("\\."); //$NON-NLS-1$
- if (names.length == 2 && names[1].equals("name")) { //$NON-NLS-1$
- boards.put(names[0], new Board(names[0], boardProps));
- }
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-}
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/launch/ArduinoLaunchConfigurationDelegate.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/launch/ArduinoLaunchConfigurationDelegate.java
index d8258ea68d7..bddbdeb69d6 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/launch/ArduinoLaunchConfigurationDelegate.java
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/launch/ArduinoLaunchConfigurationDelegate.java
@@ -16,8 +16,9 @@ import java.util.ArrayList;
import java.util.List;
import org.eclipse.cdt.arduino.core.ArduinoLaunchConsoleService;
-import org.eclipse.cdt.arduino.core.ArduinoProjectGenerator;
import org.eclipse.cdt.arduino.core.IArduinoRemoteConnection;
+import org.eclipse.cdt.arduino.core.board.ArduinoBoardManager;
+import org.eclipse.cdt.arduino.core.board.Board;
import org.eclipse.cdt.arduino.core.internal.Activator;
import org.eclipse.cdt.arduino.core.internal.Messages;
import org.eclipse.cdt.arduino.core.internal.remote.ArduinoRemoteConnection;
@@ -68,7 +69,8 @@ public class ArduinoLaunchConfigurationDelegate extends LaunchConfigurationDeleg
boolean newConfig = false;
if (configDesc == null) {
IArduinoRemoteConnection arduinoRemote = target.getService(IArduinoRemoteConnection.class);
- configDesc = ArduinoProjectGenerator.createBuildConfiguration(projDesc, arduinoRemote.getBoard());
+ configDesc = ArduinoBoardManager.instance.createBuildConfiguration(projDesc, arduinoRemote.getBoardId(),
+ arduinoRemote.getPlatformId(), arduinoRemote.getPackageId());
newConfig = true;
}
if (newConfig || !projDesc.getActiveConfiguration().equals(configDesc)) {
@@ -172,17 +174,27 @@ public class ArduinoLaunchConfigurationDelegate extends LaunchConfigurationDeleg
private ICConfigurationDescription getBuildConfiguration(ICProjectDescription projDesc, IRemoteConnection target)
throws CoreException {
String boardId;
+ String platformId;
+ String packageId;
if (target != null) {
IArduinoRemoteConnection arduinoRemote = target.getService(IArduinoRemoteConnection.class);
- boardId = arduinoRemote.getBoard().getId();
+ boardId = arduinoRemote.getBoardId();
+ platformId = arduinoRemote.getPlatformId();
+ packageId = arduinoRemote.getPackageId();
} else {
+ // TODO preference for this
boardId = "uno"; //$NON-NLS-1$
+ platformId = "avr"; //$NON-NLS-1$
+ packageId = "arduino"; //$NON-NLS-1$
}
for (ICConfigurationDescription configDesc : projDesc.getConfigurations()) {
IConfiguration config = ManagedBuildManager.getConfigurationForDescription(configDesc);
- if (ArduinoProjectGenerator.getBoard(config).getId().equals(boardId))
+ Board board = ArduinoBoardManager.instance.getBoard(config);
+ if (boardId.equals(board.getId()) && platformId.equals(board.getPlatform().getArchitecture())
+ && packageId.equals(board.getPlatform().getPackage().getName())) {
return configDesc;
+ }
}
return null;
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/messages.properties b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/messages.properties
index 6cc688b927d..a4ebc48b23a 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/messages.properties
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/messages.properties
@@ -1,3 +1,5 @@
+ArduinoBoardManager_0=Fetching package index
+ArduinoBoardManager_1=Package index missing from response
ArduinoLaunchConfigurationDelegate_1=No active Arduino remote connection.
################################################################################
# Copyright (c) 2015 QNX Software Systems and others.
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/remote/ArduinoRemoteConnection.java b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/remote/ArduinoRemoteConnection.java
index 01f7b30f6d9..502202ccb2c 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/remote/ArduinoRemoteConnection.java
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.core/src/org/eclipse/cdt/arduino/core/internal/remote/ArduinoRemoteConnection.java
@@ -14,8 +14,6 @@ import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
-import org.eclipse.cdt.arduino.core.Board;
-import org.eclipse.cdt.arduino.core.IArduinoBoardManager;
import org.eclipse.cdt.arduino.core.IArduinoRemoteConnection;
import org.eclipse.cdt.arduino.core.internal.Activator;
import org.eclipse.cdt.serial.SerialPort;
@@ -30,7 +28,6 @@ import org.eclipse.remote.serial.core.SerialPortCommandShell;
public class ArduinoRemoteConnection implements IRemoteConnectionPropertyService, IRemoteCommandShellService,
IArduinoRemoteConnection, IRemoteConnectionChangeListener {
- private final IArduinoBoardManager boardManager = Activator.getService(IArduinoBoardManager.class);
private final IRemoteConnection remoteConnection;
private SerialPort serialPort;
private SerialPortCommandShell commandShell;
@@ -90,12 +87,18 @@ public class ArduinoRemoteConnection implements IRemoteConnectionPropertyService
}
@Override
- public Board getBoard() {
- String boardId = remoteConnection.getAttribute(BOARD_ID);
- if (boardId == null) {
- boardId = "uno"; //$NON-NLS-1$
- }
- return boardManager.getBoard(boardId);
+ public String getBoardId() {
+ return remoteConnection.getAttribute(BOARD_ID);
+ }
+
+ @Override
+ public String getPlatformId() {
+ return remoteConnection.getAttribute(PLATFORM_ID);
+ }
+
+ @Override
+ public String getPackageId() {
+ return remoteConnection.getAttribute(PACKAGE_ID);
}
@Override
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/ArduinoTargetPropertyPage.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/ArduinoTargetPropertyPage.java
index 6b4a896c679..e1452a224cb 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/ArduinoTargetPropertyPage.java
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/ArduinoTargetPropertyPage.java
@@ -3,9 +3,9 @@ package org.eclipse.cdt.arduino.ui.internal.remote;
import java.io.IOException;
import java.util.Collection;
-import org.eclipse.cdt.arduino.core.Board;
-import org.eclipse.cdt.arduino.core.IArduinoBoardManager;
import org.eclipse.cdt.arduino.core.IArduinoRemoteConnection;
+import org.eclipse.cdt.arduino.core.board.ArduinoBoardManager;
+import org.eclipse.cdt.arduino.core.board.Board;
import org.eclipse.cdt.arduino.ui.internal.Activator;
import org.eclipse.cdt.arduino.ui.internal.Messages;
import org.eclipse.cdt.serial.SerialPort;
@@ -26,7 +26,7 @@ public class ArduinoTargetPropertyPage extends PropertyPage implements IWorkbenc
private Combo portSelector;
private Combo boardSelector;
-
+
private Board[] boards;
@Override
@@ -71,9 +71,9 @@ public class ArduinoTargetPropertyPage extends PropertyPage implements IWorkbenc
boardSelector = new Combo(comp, SWT.READ_ONLY);
boardSelector.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- Board currentBoard = arduinoRemote.getBoard();
- IArduinoBoardManager boardManager = Activator.getService(IArduinoBoardManager.class);
- Collection<Board> boardList = boardManager.getBoards();
+ Board currentBoard = ArduinoBoardManager.instance.getBoard(arduinoRemote.getBoardId(),
+ arduinoRemote.getPlatformId(), arduinoRemote.getPackageId());
+ Collection<Board> boardList = ArduinoBoardManager.instance.getBoards();
boards = new Board[boardList.size()];
i = 0;
int boardSel = 0;
@@ -108,5 +108,5 @@ public class ArduinoTargetPropertyPage extends PropertyPage implements IWorkbenc
}
return true;
}
-
+
}
diff --git a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/NewArduinoTargetWizardPage.java b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/NewArduinoTargetWizardPage.java
index 58ba25d3f12..955a5ad5c32 100644
--- a/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/NewArduinoTargetWizardPage.java
+++ b/toolchains/arduino/org.eclipse.cdt.arduino.ui/src/org/eclipse/cdt/arduino/ui/internal/remote/NewArduinoTargetWizardPage.java
@@ -2,8 +2,8 @@ package org.eclipse.cdt.arduino.ui.internal.remote;
import java.io.IOException;
-import org.eclipse.cdt.arduino.core.Board;
-import org.eclipse.cdt.arduino.core.IArduinoBoardManager;
+import org.eclipse.cdt.arduino.core.board.ArduinoBoardManager;
+import org.eclipse.cdt.arduino.core.board.Board;
import org.eclipse.cdt.arduino.ui.internal.Activator;
import org.eclipse.cdt.arduino.ui.internal.Messages;
import org.eclipse.cdt.serial.SerialPort;
@@ -83,14 +83,12 @@ public class NewArduinoTargetWizardPage extends WizardPage {
}
});
- IArduinoBoardManager boardManager = Activator.getService(IArduinoBoardManager.class);
-
Label boardLabel = new Label(comp, SWT.NONE);
boardLabel.setText(Messages.NewArduinoTargetWizardPage_5);
boardCombo = new Combo(comp, SWT.READ_ONLY);
boardCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
- boards = boardManager.getBoards().toArray(new Board[0]);
+ boards = ArduinoBoardManager.instance.getBoards().toArray(new Board[0]);
for (Board board : boards) {
boardCombo.add(board.getName());
}

Back to the top