diff --git a/Building.md b/Building.md
new file mode 100644
index 0000000000..518620bd55
--- /dev/null
+++ b/Building.md
@@ -0,0 +1,29 @@
+Building everything requires Maven
+mvn package -DembeddedJDKHome=/home/patrick/Downloads/arm-jdk1.7.0_45/
+TODO... Explain maven....
+TODO.. how to import into eclipse correctly...
+
+Building C++ only
+------------------
+
+C++ requires cmake if not run from maven, and is much faster.
+Make a new directory and then run:
+```
+mkdir build && cd build
+cmake .. -DCMAKE_TOOLCHAIN_FILE=../arm-toolchain.cmake
+make # multicore add -j(num of cpu cores + 1), so -j3 on dual core for faster compile
+make install DESTDIR=/some/dir/you/want/to/put/all/headers/and/libs #optional
+``
+
+Alternatively, if you like IDE's, you can import it directly into QtDeveloper, or a number of other IDE's such as Code::Blocks or Eclipse. See CMake documentation for details.
+Eclipse demo:
+```
+cd ..
+mkdir build && cd build
+cmake -DCMAKE_TOOLCHAIN_FILE=../allwpilib/arm-toolchain.cmake .. -G "Eclipse CDT4 - Unix Makefiles"
+```
+and then import that directory into eclipse. Eclipse will detect a CDT project and standard tools will work.
+
+GCC versions
+------------
+Update arm-toolchain.cmake if the triplet changes (eg using Ubuntu repo arm compiler is arm-linux-gnueabi) or in a non-standard location. Currently it assumes that the compiler is on the path.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 1d4db94500..2da30cb569 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 2.8)
project(All-WPILib)
set(CMAKE_BUILD_TYPE Debug)
-set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat=2 -Wextra -Wno-unused-parameter")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wformat=2 -Wextra -Wno-unused-parameter -fPIC -Werror")
SET(CMAKE_SKIP_BUILD_RPATH TRUE)
file(GLOB_RECURSE NI_LIBS ni-libraries/*.so*)
diff --git a/cmake/pom.xml b/cmake/pom.xml
index c0b480a84e..d1730d87ce 100644
--- a/cmake/pom.xml
+++ b/cmake/pom.xml
@@ -138,8 +138,8 @@
zip
- ${project.build.directory}/cmake/target-root/lib/libHALAthena.so
- so
+ ${project.build.directory}/cmake/target-root/lib/libHALAthena.a
+ a
diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/META-INF/MANIFEST.MF b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/META-INF/MANIFEST.MF
index b321588db9..343ba0b42a 100644
--- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/META-INF/MANIFEST.MF
+++ b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/META-INF/MANIFEST.MF
@@ -24,7 +24,8 @@ Require-Bundle: org.eclipse.ui,
org.eclipse.cdt.debug.core;bundle-version="7.2.0",
org.eclipse.cdt.debug.ui;bundle-version="7.2.0",
org.eclipse.cdt.launch;bundle-version="7.1.0",
- org.eclipse.cdt.launch.remote;bundle-version="2.4.0"
+ org.eclipse.cdt.launch.remote;bundle-version="2.4.0",
+ org.eclipse.cdt.debug.mi.core;bundle-version="7.2.0"
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Export-Package: edu.wpi.first.wpilib.plugins.cpp,
diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/plugin.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/plugin.xml
index 492db0c514..1aa3c2b5e6 100644
--- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/plugin.xml
+++ b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/plugin.xml
@@ -150,7 +150,7 @@
description="Deploy the WPILib project to the athena board."
icon="resources/icons/wpi.ico"
id="edu.wpi.first.wpilib.plugins.cpp.launching.deploy"
- label="WPILib Deploy"
+ label="WPILib Deploy Configure Builder"
modes="run,debug">
diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/.cproject b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/.cproject
index bfc041ab71..08aebc6031 100644
--- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/.cproject
+++ b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/resources/templates/.cproject
@@ -5,10 +5,10 @@
-
+
@@ -34,15 +34,31 @@
-
-
+
+
+
-
@@ -66,12 +82,12 @@
-
+
diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/DeployLaunchShortcut.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/DeployLaunchShortcut.java
index 58e8387cbf..3026bb09db 100644
--- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/DeployLaunchShortcut.java
+++ b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/DeployLaunchShortcut.java
@@ -2,25 +2,42 @@ package edu.wpi.first.wpilib.plugins.cpp.launching;
import java.io.File;
import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Vector;
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
+import org.eclipse.cdt.debug.core.executables.Executable;
+import org.eclipse.cdt.debug.core.executables.ExecutablesManager;
+import org.eclipse.cdt.debug.mi.core.IGDBServerMILaunchConfigurationConstants;
+import org.eclipse.cdt.debug.mi.core.IMIConstants;
+import org.eclipse.cdt.debug.mi.core.IMILaunchConfigurationConstants;
import org.eclipse.cdt.launch.remote.IRemoteConnectionConfigurationConstants;
+import org.eclipse.cdt.launch.remote.IRemoteConnectionHostConstants;
+import org.eclipse.cdt.ui.ICDTConstants;
import org.eclipse.core.internal.resources.Resource;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.debug.internal.ui.launchConfigurations.LaunchHistory;
+import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.debug.ui.IDebugUIConstants;
+import org.eclipse.debug.ui.ILaunchGroup;
import org.eclipse.debug.ui.ILaunchShortcut;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IFileEditorInput;
import org.eclipse.ui.PlatformUI;
@@ -38,147 +55,118 @@ import edu.wpi.first.wpilib.plugins.cpp.WPILibCPPPlugin;
* @author Alex Henning
*/
@SuppressWarnings("restriction")
-public class DeployLaunchShortcut implements ILaunchShortcut {
- //Class constants - used to delineate types for launch shortcuts
+public class DeployLaunchShortcut implements ILaunchShortcut
+{
+ // Class constants - used to delineate types for launch shortcuts
public static final String DEPLOY_TYPE = "edu.wpi.first.wpilib.plugins.core.deploy";
- private static final String ANT_SERVER_THREAD_NAME = "Ant Build Server Connection";
-
- private static ILaunch lastDeploy = null;
/**
- * Returns the launch type of the shortcut that was used, one of the constants
- * defined in BaseLaunchShortcut
+ * Returns the launch type of the shortcut that was used, one of the
+ * constants defined in BaseLaunchShortcut
+ *
* @return Launch shortcut type
*/
- public String getLaunchType() {return DEPLOY_TYPE;}
+ public String getLaunchType()
+ {
+ return DEPLOY_TYPE;
+ }
@Override
- public void launch(ISelection selection, String mode) {
- //Extract resource from selection
- StructuredSelection sel = (StructuredSelection)selection;
+ public void launch(ISelection selection, String mode)
+ {
+ // Extract resource from selection
+ StructuredSelection sel = (StructuredSelection) selection;
IProject activeProject = null;
- if (sel.getFirstElement() instanceof IProject) {
+ if (sel.getFirstElement() instanceof IProject)
+ {
activeProject = (IProject) sel.getFirstElement();
- } else {
+ } else
+ {
return;
}
-
- //Run config using project found in extracted resource, with indicated mode
- runConfig(activeProject, mode);
+
+ // Run config using project found in extracted resource, with indicated
+ // mode
+ runConfig(activeProject, mode, PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
}
-
+
@Override
- public void launch(IEditorPart editor, String mode) {
- //Extract resource from editor
- if(editor != null){
- IFileEditorInput input = (IFileEditorInput)editor.getEditorInput();
- IFile file = input.getFile();
- IProject activeProject = file.getProject();
-
- //If editor existed, run config using extracted resource in indicated mode
- runConfig(activeProject, mode);
- }else{
+ public void launch(IEditorPart editor, String mode)
+ {
+ // Extract resource from editor
+ if (editor != null)
+ {
+ IFileEditorInput input = (IFileEditorInput) editor.getEditorInput();
+ IFile file = input.getFile();
+ IProject activeProject = file.getProject();
+
+ // If editor existed, run config using extracted resource in
+ // indicated mode
+ runConfig(activeProject, mode, editor.getSite().getWorkbenchWindow().getShell());
+ } else
+ {
System.err.println("editor was null");
}
-
+
}
/**
- * Runs the ant script using the correct target for the indicated mode (deploy to cRIO or just compile)
- * @param activeProj The project that the script will be run on/from
- * @param mode The mode it will be run in (ILaunchManager.RUN_MODE or ILaunchManager.DEBUG_MODE)
+ *
+ * @param activeProj
+ * The project that the script will be run on/from
+ * @param mode
+ * The mode it will be run in (ILaunchManager.RUN_MODE or
+ * ILaunchManager.DEBUG_MODE)
*/
- public void runConfig(IProject activeProj, String mode){
- String targets = "deploy";
-
- if(mode.equals(ILaunchManager.RUN_MODE)){
- if(getLaunchType().equals(DEPLOY_TYPE)){
- targets = "deploy";
- }
- } else if ((mode.equals(ILaunchManager.DEBUG_MODE))&&(getLaunchType().equals(DEPLOY_TYPE))) {
- targets = "debug-deploy";
- try{
- PlatformUI.getWorkbench().showPerspective(IDebugUIConstants.ID_DEBUG_PERSPECTIVE,
- PlatformUI.getWorkbench().getActiveWorkbenchWindow());
-
- }catch(Exception e){}
+ public void runConfig(IProject activeProj, String mode, Shell shell) //TODO: figure out UI issues. tjats why this is undocumented""
+ {
+ ILaunchConfigurationWorkingCopy config;
+ try
+ {
+ config = getRemoteDebugConfig(activeProj);
+ //config.doSave(); // NOTE: For debugging
+ //org.eclipse.debug.core.DebugPlugin.getDefault().getLaunchManager().addLaunch(config.launch(mode, null));
+ //THIS IS MADDENING! we want to add to the recent history, but I can't seem to find a public api to do so, so lets just launch the config dialog
+ //DebugUITools.openLaunchConfigurationPropertiesDialog(shell, config, "org.eclipse.cdt.launch.launchGroup");
+ //config.launch(mode, new NullProgressMonitor(), false, true);
+ DebugUITools.launch(config, mode);
+ } catch (CoreException e)
+ {
+ System.err.println("Debug attach failed.");
+ e.printStackTrace();
}
- if((lastDeploy != null)&&(!lastDeploy.isTerminated())){
- System.out.println("Last deploy running");
- //Find the server connection thread and kill it
- Vector threadGroups = new Vector();
- ThreadGroup root = Thread.currentThread().getThreadGroup().getParent();
- while (root.getParent() != null) {root = root.getParent();}
- threadGroups.add(root);
- ThreadGroup threadGroup = threadGroups.remove(0);
- int numThreads = threadGroup.activeCount();
- Thread[] threads = new Thread[numThreads*100];
- numThreads = threadGroup.enumerate(threads, true);
-
- for(Thread current: threads){
- if(current != null){
- if(current.getName().equals(ANT_SERVER_THREAD_NAME)){
- try{
- //Manually end thread and then try terminating launch
- Method stopMethod = current.getClass().getMethod("stop");
- stopMethod.invoke(current);
- lastDeploy.terminate();
- break;
- }catch(Exception e){e.printStackTrace();}
- }
- }
- }
-
- System.out.println("Waiting");
- try{wait(1000);}catch(Exception e){}
-
- }
-
- if (mode.equals(ILaunchManager.RUN_MODE)) {
- System.out.println("Running ant file: " + activeProj.getLocation().toOSString() + File.separator + "build.xml");
- System.out.println("Targets: " + targets + ", Mode: " + mode);
- lastDeploy = AntLauncher.runAntFile(new File (activeProj.getLocation().toOSString() + File.separator + "build.xml"), targets, null, mode);
- } else if((mode.equals(ILaunchManager.DEBUG_MODE))&&(getLaunchType().equals(DEPLOY_TYPE))) {
- ILaunchConfigurationWorkingCopy config;
- try {
- config = getRemoteDebugConfig(activeProj);
- //config.doSave(); // NOTE: For debugging
- startDebugConfig(config, lastDeploy);
- } catch (CoreException e) {
- System.err.println("Debug attach failed.");
- e.printStackTrace();
- }
- }
-
- try {
+ try
+ {
activeProj.refreshLocal(Resource.DEPTH_INFINITE, null);
- } catch (Exception e) {}
+ } catch (Exception e)
+ {
+ }
}
- private ILaunchConfigurationWorkingCopy getRemoteDebugConfig(IProject activeProj) throws CoreException {
+ private ILaunchConfigurationWorkingCopy getRemoteDebugConfig(IProject activeProj) throws CoreException
+ {
ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager();
ILaunchConfigurationType type = manager.getLaunchConfigurationType(ICDTLaunchConfigurationConstants.ID_LAUNCH_C_REMOTE_APP);
int teamNumber = WPILibCore.getDefault().getTeamNumber(activeProj);
String remote_connection = RSEUtils.getTarget(teamNumber).getName();
-
- ILaunchConfigurationWorkingCopy config = type.newInstance(null, "Debug "+activeProj.getName());
+
+ ILaunchConfigurationWorkingCopy config = type.newInstance(null, activeProj.getName());
config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROJECT_NAME, activeProj.getName());
- config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME, "Debug/FRCUserProgram");
- config.setAttribute(DebugPlugin.getUniqueIdentifier() + ".ATTR_TARGET_PATH", "/home/admin/FRCUserProgram");
- config.setAttribute("org.eclipse.cdt.debug.mi.core.DEBUG_NAME", WPILibCPPPlugin.getDefault().getToolchain()+"/bin/arm-none-linux-gnueabi-gdb");
- config.setAttribute("org.eclipse.cdt.dsf.gdb.DEBUG_NAME", WPILibCPPPlugin.getDefault().getToolchain()+"/bin/arm-none-linux-gnueabi-gdb");
+ Collection exes = ExecutablesManager.getExecutablesManager().getExecutablesForProject(activeProj);
+ config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME,
+ exes.size() > 0 ? exes.toArray(new Executable[0])[0].getPath().makeRelativeTo(activeProj.getLocation()).toString():
+ "Debug/FRCUserProgram");
+ config.setAttribute(IRemoteConnectionConfigurationConstants.ATTR_REMOTE_PATH, "/home/admin/FRCUserProgram");
+ config.setAttribute(IMILaunchConfigurationConstants.ATTR_DEBUG_NAME, WPILibCPPPlugin.getDefault().getToolchain() + "/bin/arm-none-linux-gnueabi-gdb");
config.setAttribute(IRemoteConnectionConfigurationConstants.ATTR_REMOTE_CONNECTION, remote_connection);
- config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ID, "org.eclipse.rse.remotecdt.RemoteGDBDebugger");
- Map launchers = new HashMap();
- launchers.put("[debug]", "org.eclipse.rse.remotecdt.launch");
- config.setAttribute(DebugPlugin.getUniqueIdentifier() + ".preferred_launchers", launchers);
-
+ config.setAttribute(ICDTLaunchConfigurationConstants.ATTR_DEBUGGER_ID, "gdbserver");
+ List solibs = new ArrayList<>();
+ solibs.add(WPILibCPPPlugin.getDefault().getToolchain() + "/arm-non-linux-gnueabi/libc/lib");
+ solibs.add(WPILibCPPPlugin.getDefault().getToolchain() + "/arm-non-linux-gnueabi/libc/usr/lib");
+ solibs.add(WPILibCPPPlugin.getDefault().getCPPDir() + "/lib");
+ config.setAttribute(IMILaunchConfigurationConstants.ATTR_DEBUGGER_SOLIB_PATH, solibs);
+
return config;
}
-
- private void startDebugConfig(final ILaunchConfigurationWorkingCopy config, ILaunch deploy) throws CoreException {
- config.launch(ILaunchManager.DEBUG_MODE, null);
- }
}
-
diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/RSEUtils.java b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/RSEUtils.java
index 1a88a91246..6a2bc68fb5 100644
--- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/RSEUtils.java
+++ b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/java/edu/wpi/first/wpilib/plugins/cpp/launching/RSEUtils.java
@@ -2,6 +2,9 @@ package edu.wpi.first.wpilib.plugins.cpp.launching;
import java.util.Arrays;
+import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILaunchConfigurationType;
import org.eclipse.rse.core.IRSESystemType;
import org.eclipse.rse.core.PasswordPersistenceManager;
import org.eclipse.rse.core.RSECorePlugin;
@@ -15,7 +18,7 @@ public class RSEUtils {
public static IHost getTarget(int teamNumber) {
// The ip address based on the team number
String hostName = "10."+(teamNumber/100)+"."+(teamNumber%100)+".2";
- String connectionName = "Team "+teamNumber;
+ String connectionName = hostName; //"Team "+teamNumber;
// get the singleton RSE registry
try {
@@ -42,7 +45,7 @@ public class RSEUtils {
"The remote target for debugging the robot for team "+teamNumber+".");
host.setDefaultUserId("admin");
SystemSignonInformation info = new SystemSignonInformation(hostName, "admin",
- "XX", systemType);
+ "", systemType);
PasswordPersistenceManager.getInstance().add(info, true, false);
} catch (Exception e) {
e.printStackTrace();
diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/build.xml b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/build.xml
index 3a3248fdb6..8c46cf2257 100644
--- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/build.xml
+++ b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/build.xml
@@ -30,14 +30,13 @@
- [athena-deploy] Killing running program
+ username="${username}"
+ password="${password}"
+ trust="true"
+ command="rm ${deploy.dir}/FRCUserProgram" />
[athena-deploy] Copying code over.
-
command="opkg install /tmp/${opkg.name}_${cpp-sos}_${opkg.arch}.deb; sh -c 'rm -rf /tmp/wpilib*.deb'"/>
-
[athena-deploy] Starting program.
+ command="chmod +x ${deploy.dir}/FRCUserProgram; ${deploy.dir}/FRCUserProgram"/>
diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/debugjavaprogram b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/debugjavaprogram
deleted file mode 100644
index e5c0068b6a..0000000000
--- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/debugjavaprogram
+++ /dev/null
@@ -1,6 +0,0 @@
-#. ./.profile
-killall java
-sleep 1
-nohup java -Djna.library.path=$LD_LIBRARY_PATH -Xmx32M -agentlib:jdwp=transport=dt_socket,address=8348,server=y,suspend=y -jar FRCUserProgram.jar edu.wpi.first.wpilibj.unittests.RunTests
-
-
diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/runcppprogram b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/runcppprogram
deleted file mode 100644
index 8f6e0b4827..0000000000
--- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/runcppprogram
+++ /dev/null
@@ -1,6 +0,0 @@
-#. ./.profile
-killall java
-killall FRCUserProgram
-sleep 1
-chmod +x ./FRCUserProgram
-./FRCUserProgram
diff --git a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/runjavaprogram b/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/runjavaprogram
deleted file mode 100644
index 272b38cd18..0000000000
--- a/eclipse-plugins/edu.wpi.first.wpilib.plugins.cpp/src/main/resources/cpp-zip/ant/runjavaprogram
+++ /dev/null
@@ -1,6 +0,0 @@
-#. ./.profile
-killall java
-killall FRCUserProgram
-sleep 1
-nohup /usr/local/frc/JRE/bin/java -jar FRCUserProgram.jar
-#nohup /usr/local/frc/JRE/bin/java -Djna.library.path=$LD_LIBRARY_PATH -Xmx32M -jar FRCUserProgram.jar
diff --git a/hal/CMakeLists.txt b/hal/CMakeLists.txt
index a41d559995..2be3df3624 100644
--- a/hal/CMakeLists.txt
+++ b/hal/CMakeLists.txt
@@ -3,9 +3,9 @@ project(HAL)
file(GLOB_RECURSE SRC_FILES lib/Athena/*.cpp)
include_directories(lib/Athena include)
-add_library(HALAthena SHARED ${SRC_FILES})
+add_library(HALAthena STATIC ${SRC_FILES})
target_link_libraries(HALAthena ${NI_LIBS})
-INSTALL(TARGETS HALAthena LIBRARY DESTINATION lib COMPONENT lib)
+INSTALL(TARGETS HALAthena ARCHIVE DESTINATION lib COMPONENT lib)
INSTALL(FILES ${NI_LIBS} DESTINATION lib COMPONENT ni_lib)
INSTALL(DIRECTORY include DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT headers)
# lib/ c m gcc_s ld-linux
diff --git a/hal/include/HAL/Analog.h b/hal/include/HAL/Analog.h
deleted file mode 100644
index 260cbeceb2..0000000000
--- a/hal/include/HAL/Analog.h
+++ /dev/null
@@ -1,66 +0,0 @@
-
-#ifdef __vxworks
-#include
-#else
-#include
-#endif
-
-#ifndef HAL_ANALOG_H
-#define HAL_ANALOG_H
-
-extern "C" {
- void* initializeAnalogPort(void* port_pointer, int32_t *status);
- bool checkAnalogModule(uint8_t module);
- bool checkAnalogChannel(uint32_t pin);
-
- void setAnalogSampleRate(double samplesPerSecond, int32_t *status);
- float getAnalogSampleRate(int32_t *status);
- void setAnalogSampleRateWithModule(uint8_t module, double samplesPerSecond, int32_t *status);
- float getAnalogSampleRateWithModule(uint8_t module, int32_t *status);
- void setAnalogAverageBits(void* analog_port_pointer, uint32_t bits, int32_t *status);
- uint32_t getAnalogAverageBits(void* analog_port_pointer, int32_t *status);
- void setAnalogOversampleBits(void* analog_port_pointer, uint32_t bits, int32_t *status);
- uint32_t getAnalogOversampleBits(void* analog_port_pointer, int32_t *status);
- int16_t getAnalogValue(void* analog_port_pointer, int32_t *status);
- int32_t getAnalogAverageValue(void* analog_port_pointer, int32_t *status);
- int32_t getAnalogVoltsToValue(void* analog_port_pointer, double voltage, int32_t *status);
- float getAnalogVoltage(void* analog_port_pointer, int32_t *status);
- float getAnalogAverageVoltage(void* analog_port_pointer, int32_t *status);
- uint32_t getAnalogLSBWeight(void* analog_port_pointer, int32_t *status);
- int32_t getAnalogOffset(void* analog_port_pointer, int32_t *status);
-
- bool isAccumulatorChannel(void* analog_port_pointer, int32_t *status);
- void initAccumulator(void* analog_port_pointer, int32_t *status);
- void resetAccumulator(void* analog_port_pointer, int32_t *status);
- void setAccumulatorCenter(void* analog_port_pointer, int32_t center, int32_t *status);
- void setAccumulatorDeadband(void* analog_port_pointer, int32_t deadband, int32_t *status);
- int64_t getAccumulatorValue(void* analog_port_pointer, int32_t *status);
- uint32_t getAccumulatorCount(void* analog_port_pointer, int32_t *status);
- void getAccumulatorOutput(void* analog_port_pointer, int64_t *value, uint32_t *count, int32_t *status);
-
- typedef enum {kInWindow=0, kState=1, kRisingPulse=2, kFallingPulse=3} AnalogTriggerType;
- void* initializeAnalogTrigger(void* port_pointer, uint32_t *index, int32_t *status);
- void cleanAnalogTrigger(void* analog_trigger_pointer, int32_t *status);
- void setAnalogTriggerLimitsRaw(void* analog_trigger_pointer, int32_t lower, int32_t upper, int32_t *status);
- void setAnalogTriggerLimitsVoltage(void* analog_trigger_pointer, double lower, double upper, int32_t *status);
- void setAnalogTriggerAveraged(void* analog_trigger_pointer, bool useAveragedValue, int32_t *status);
- void setAnalogTriggerFiltered(void* analog_trigger_pointer, bool useFilteredValue, int32_t *status);
- bool getAnalogTriggerInWindow(void* analog_trigger_pointer, int32_t *status);
- bool getAnalogTriggerTriggerState(void* analog_trigger_pointer, int32_t *status);
- bool getAnalogTriggerOutput(void* analog_trigger_pointer, AnalogTriggerType type, int32_t *status);
-
-
- //// Float JNA Hack
- // Float
- int getAnalogSampleRateIntHack(int32_t *status);
- int getAnalogSampleRateWithModuleIntHack(uint8_t module, int32_t *status);
- int getAnalogVoltageIntHack(void* analog_port_pointer, int32_t *status);
- int getAnalogAverageVoltageIntHack(void* analog_port_pointer, int32_t *status);
-
- // Doubles
- void setAnalogSampleRateIntHack(int samplesPerSecond, int32_t *status);
- void setAnalogSampleRateWithModuleIntHack(uint8_t module, int samplesPerSecond, int32_t *status);
- int32_t getAnalogVoltsToValueIntHack(void* analog_port_pointer, int voltage, int32_t *status);
- void setAnalogTriggerLimitsVoltageIntHack(void* analog_trigger_pointer, int lower, int upper, int32_t *status);
-}
-#endif
diff --git a/hal/include/HAL/Analog.hpp b/hal/include/HAL/Analog.hpp
new file mode 100644
index 0000000000..a88d557cdb
--- /dev/null
+++ b/hal/include/HAL/Analog.hpp
@@ -0,0 +1,78 @@
+#pragma once
+
+#ifdef __vxworks
+#include
+#else
+#include
+#endif
+
+enum AnalogTriggerType
+{
+ kInWindow = 0,
+ kState = 1,
+ kRisingPulse = 2,
+ kFallingPulse = 3
+};
+
+extern "C"
+{
+ void* initializeAnalogPort(void* port_pointer, int32_t *status);
+ bool checkAnalogModule(uint8_t module);
+ bool checkAnalogChannel(uint32_t pin);
+
+ void setAnalogSampleRate(double samplesPerSecond, int32_t *status);
+ float getAnalogSampleRate(int32_t *status);
+ void setAnalogSampleRateWithModule(uint8_t module, double samplesPerSecond, int32_t *status);
+ float getAnalogSampleRateWithModule(uint8_t module, int32_t *status);
+ void setAnalogAverageBits(void* analog_port_pointer, uint32_t bits, int32_t *status);
+ uint32_t getAnalogAverageBits(void* analog_port_pointer, int32_t *status);
+ void setAnalogOversampleBits(void* analog_port_pointer, uint32_t bits, int32_t *status);
+ uint32_t getAnalogOversampleBits(void* analog_port_pointer, int32_t *status);
+ int16_t getAnalogValue(void* analog_port_pointer, int32_t *status);
+ int32_t getAnalogAverageValue(void* analog_port_pointer, int32_t *status);
+ int32_t getAnalogVoltsToValue(void* analog_port_pointer, double voltage, int32_t *status);
+ float getAnalogVoltage(void* analog_port_pointer, int32_t *status);
+ float getAnalogAverageVoltage(void* analog_port_pointer, int32_t *status);
+ uint32_t getAnalogLSBWeight(void* analog_port_pointer, int32_t *status);
+ int32_t getAnalogOffset(void* analog_port_pointer, int32_t *status);
+
+ bool isAccumulatorChannel(void* analog_port_pointer, int32_t *status);
+ void initAccumulator(void* analog_port_pointer, int32_t *status);
+ void resetAccumulator(void* analog_port_pointer, int32_t *status);
+ void setAccumulatorCenter(void* analog_port_pointer, int32_t center, int32_t *status);
+ void setAccumulatorDeadband(void* analog_port_pointer, int32_t deadband, int32_t *status);
+ int64_t getAccumulatorValue(void* analog_port_pointer, int32_t *status);
+ uint32_t getAccumulatorCount(void* analog_port_pointer, int32_t *status);
+ void getAccumulatorOutput(void* analog_port_pointer, int64_t *value, uint32_t *count,
+ int32_t *status);
+
+ void* initializeAnalogTrigger(void* port_pointer, uint32_t *index, int32_t *status);
+ void cleanAnalogTrigger(void* analog_trigger_pointer, int32_t *status);
+ void setAnalogTriggerLimitsRaw(void* analog_trigger_pointer, int32_t lower, int32_t upper,
+ int32_t *status);
+ void setAnalogTriggerLimitsVoltage(void* analog_trigger_pointer, double lower, double upper,
+ int32_t *status);
+ void setAnalogTriggerAveraged(void* analog_trigger_pointer, bool useAveragedValue,
+ int32_t *status);
+ void setAnalogTriggerFiltered(void* analog_trigger_pointer, bool useFilteredValue,
+ int32_t *status);
+ bool getAnalogTriggerInWindow(void* analog_trigger_pointer, int32_t *status);
+ bool getAnalogTriggerTriggerState(void* analog_trigger_pointer, int32_t *status);
+ bool getAnalogTriggerOutput(void* analog_trigger_pointer, AnalogTriggerType type,
+ int32_t *status);
+
+ //// Float JNA Hack
+ // Float
+ int getAnalogSampleRateIntHack(int32_t *status);
+ int getAnalogSampleRateWithModuleIntHack(uint8_t module, int32_t *status);
+ int getAnalogVoltageIntHack(void* analog_port_pointer, int32_t *status);
+ int getAnalogAverageVoltageIntHack(void* analog_port_pointer, int32_t *status);
+
+ // Doubles
+ void setAnalogSampleRateIntHack(int samplesPerSecond, int32_t *status);
+ void setAnalogSampleRateWithModuleIntHack(uint8_t module, int samplesPerSecond,
+ int32_t *status);
+ int32_t getAnalogVoltsToValueIntHack(void* analog_port_pointer, int voltage, int32_t *status);
+ void setAnalogTriggerLimitsVoltageIntHack(void* analog_trigger_pointer, int lower, int upper,
+ int32_t *status);
+}
diff --git a/hal/include/HAL/CAN.h b/hal/include/HAL/CAN.hpp
similarity index 56%
rename from hal/include/HAL/CAN.h
rename to hal/include/HAL/CAN.hpp
index c069adea09..6b032a43bd 100644
--- a/hal/include/HAL/CAN.h
+++ b/hal/include/HAL/CAN.hpp
@@ -1,3 +1,4 @@
+#pragma once
#ifdef __vxworks
#include
@@ -5,11 +6,10 @@
#include
#endif
-#ifndef HAL_CAN_H
-#define HAL_CAN_H
-
-extern "C" {
- void JaguarCANSendMessage(uint32_t messageID, const uint8_t *data, uint8_t dataSize, int32_t *status);
- void JaguarCANReceiveMessage(uint32_t *messageID, uint8_t *data, uint8_t *dataSize, uint32_t timeoutMs, int32_t *status);
+extern "C"
+{
+ void JaguarCANSendMessage(uint32_t messageID, const uint8_t *data, uint8_t dataSize,
+ int32_t *status);
+ void JaguarCANReceiveMessage(uint32_t *messageID, uint8_t *data, uint8_t *dataSize,
+ uint32_t timeoutMs, int32_t *status);
}
-#endif
diff --git a/hal/include/HAL/Digital.h b/hal/include/HAL/Digital.h
deleted file mode 100644
index 91a33fd802..0000000000
--- a/hal/include/HAL/Digital.h
+++ /dev/null
@@ -1,141 +0,0 @@
-
-#ifdef __vxworks
-#include
-#else
-#include
-#endif
-
-#ifndef HAL_DIGITAL_H
-#define HAL_DIGITAL_H
-extern "C" {
- void* initializeDigitalPort(void* port_pointer, int32_t *status);
- bool checkDigitalModule(uint8_t module);
- bool checkPWMChannel(void* digital_port_pointer);
- bool checkRelayChannel(void* digital_port_pointer);
- uint8_t remapDigitalChannel(uint32_t pin, int32_t *status);
- uint8_t unmapDigitalChannel(uint32_t pin, int32_t *status);
-
- void setPWM(void* digital_port_pointer, unsigned short value, int32_t *status);
- unsigned short getPWM(void* digital_port_pointer, int32_t *status);
- void setPWMPeriodScale(void* digital_port_pointer, uint32_t squelchMask, int32_t *status);
- void* allocatePWM(int32_t *status);
- void* allocatePWMWithModule(uint8_t module, int32_t *status);
- void freePWM(void* pwmGenerator, int32_t *status);
- void freePWMWithModule(uint8_t module, void* pwmGenerator, int32_t *status);
- void setPWMRate(double rate, int32_t *status);
- void setPWMRateWithModule(uint8_t module, double rate, int32_t *status);
- void setPWMDutyCycle(void* pwmGenerator, double dutyCycle, int32_t *status);
- void setPWMDutyCycleWithModule(uint8_t module, void* pwmGenerator, double dutyCycle, int32_t *status);
- void setPWMOutputChannel(void* pwmGenerator, uint32_t pin, int32_t *status);
- void setPWMOutputChannelWithModule(uint8_t module, void* pwmGenerator, uint32_t pin, int32_t *status);
-
- void setRelayForward(void* digital_port_pointer, bool on, int32_t *status);
- void setRelayReverse(void* digital_port_pointer, bool on, int32_t *status);
- bool getRelayForward(void* digital_port_pointer, int32_t *status);
- bool getRelayReverse(void* digital_port_pointer, int32_t *status);
-
- bool allocateDIO(void* digital_port_pointer, bool input, int32_t *status);
- void freeDIO(void* digital_port_pointer, int32_t *status);
- void setDIO(void* digital_port_pointer, short value, int32_t *status);
- bool getDIO(void* digital_port_pointer, int32_t *status);
- bool getDIODirection(void* digital_port_pointer, int32_t *status);
- void pulse(void* digital_port_pointer, double pulseLength, int32_t *status);
- bool isPulsing(void* digital_port_pointer, int32_t *status);
- bool isAnyPulsing(int32_t *status);
- bool isAnyPulsingWithModule(uint8_t module, int32_t *status);
-
- typedef enum {kTwoPulse=0, kSemiperiod=1, kPulseLength=2, kExternalDirection=3} Mode;
-
- void* initializeCounter(Mode mode, uint32_t *index, int32_t *status);
- void freeCounter(void* counter_pointer, int32_t *status);
- void setCounterAverageSize(void* counter_pointer, int32_t size, int32_t *status);
- void setCounterUpSourceWithModule(void* counter_pointer, uint8_t module, uint32_t pin,
- bool analogTrigger, int32_t *status); // TODO: Without Module
- void setCounterUpSourceEdge(void* counter_pointer, bool risingEdge, bool fallingEdge, int32_t *status);
- void clearCounterUpSource(void* counter_pointer, int32_t *status);
- void setCounterDownSourceWithModule(void* counter_pointer, uint8_t module, uint32_t pin,
- bool analogTrigger, int32_t *status); // TODO: Without Module
- void setCounterDownSourceEdge(void* counter_pointer, bool risingEdge, bool fallingEdge, int32_t *status);
- void clearCounterDownSource(void* counter_pointer, int32_t *status);
- void setCounterUpDownMode(void* counter_pointer, int32_t *status);
- void setCounterExternalDirectionMode(void* counter_pointer, int32_t *status);
- void setCounterSemiPeriodMode(void* counter_pointer, bool highSemiPeriod, int32_t *status);
- void setCounterPulseLengthMode(void* counter_pointer, double threshold, int32_t *status);
- int32_t getCounterSamplesToAverage(void* counter_pointer, int32_t *status);
- void setCounterSamplesToAverage(void* counter_pointer, int samplesToAverage, int32_t *status);
- void startCounter(void* counter_pointer, int32_t *status);
- void stopCounter(void* counter_pointer, int32_t *status);
- void resetCounter(void* counter_pointer, int32_t *status);
- int32_t getCounter(void* counter_pointer, int32_t *status);
- double getCounterPeriod(void* counter_pointer, int32_t *status);
- void setCounterMaxPeriod(void* counter_pointer, double maxPeriod, int32_t *status);
- void setCounterUpdateWhenEmpty(void* counter_pointer, bool enabled, int32_t *status);
- bool getCounterStopped(void* counter_pointer, int32_t *status);
- bool getCounterDirection(void* counter_pointer, int32_t *status);
- void setCounterReverseDirection(void* counter_pointer, bool reverseDirection, int32_t *status);
-
- void* initializeEncoder(uint8_t port_a_module, uint32_t port_a_pin, bool port_a_analog_trigger,
- uint8_t port_b_module, uint32_t port_b_pin, bool port_b_analog_trigger,
- bool reverseDirection, int32_t *index, int32_t *status); // TODO: fix routing
- void freeEncoder(void* encoder_pointer, int32_t *status);
- void startEncoder(void* encoder_pointer, int32_t *status);
- void stopEncoder(void* encoder_pointer, int32_t *status);
- void resetEncoder(void* encoder_pointer, int32_t *status);
- int32_t getEncoder(void* encoder_pointer, int32_t *status); // Raw value
- double getEncoderPeriod(void* encoder_pointer, int32_t *status);
- void setEncoderMaxPeriod(void* encoder_pointer, double maxPeriod, int32_t *status);
- bool getEncoderStopped(void* encoder_pointer, int32_t *status);
- bool getEncoderDirection(void* encoder_pointer, int32_t *status);
- void setEncoderReverseDirection(void* encoder_pointer, bool reverseDirection, int32_t *status);
- void setEncoderSamplesToAverage(void* encoder_pointer, uint32_t samplesToAverage, int32_t *status);
- uint32_t getEncoderSamplesToAverage(void* encoder_pointer, int32_t *status);
-
- uint16_t getLoopTiming(int32_t *status);
- uint16_t getLoopTimingWithModule(uint8_t module, int32_t *status);
-
- enum tSPIConstants {kReceiveFIFODepth=512, kTransmitFIFODepth=512};
- enum tFrameMode {kChipSelect, kPreLatchPulse, kPostLatchPulse, kPreAndPostLatchPulse};
- void* initializeSPI(uint8_t sclk_routing_module, uint32_t sclk_routing_pin,
- uint8_t mosi_routing_module, uint32_t mosi_routing_pin,
- uint8_t miso_routing_module, uint32_t miso_routing_pin, int32_t *status);
- void cleanSPI(void* spi_pointer, int32_t *status);
- void setSPIBitsPerWord(void* spi_pointer, uint32_t bits, int32_t *status);
- uint32_t getSPIBitsPerWord(void* spi_pointer, int32_t *status);
- void setSPIClockRate(void* spi_pointer, double hz, int32_t *status);
- void setSPIMSBFirst(void* spi_pointer, int32_t *status);
- void setSPILSBFirst(void* spi_pointer, int32_t *status);
- void setSPISampleDataOnFalling(void* spi_pointer, int32_t *status);
- void setSPISampleDataOnRising(void* spi_pointer, int32_t *status);
- void setSPISlaveSelect(void* spi_pointer, uint8_t ss_routing_module, uint32_t ss_routing_pin,
- int32_t *status);
- void setSPILatchMode(void* spi_pointer, tFrameMode mode, int32_t *status);
- tFrameMode getSPILatchMode(void* spi_pointer, int32_t *status);
- void setSPIFramePolarity(void* spi_pointer, bool activeLow, int32_t *status);
- bool getSPIFramePolarity(void* spi_pointer, int32_t *status);
- void setSPIClockActiveLow(void* spi_pointer, int32_t *status);
- void setSPIClockActiveHigh(void* spi_pointer, int32_t *status);
- void applySPIConfig(void* spi_pointer, int32_t *status);
- uint16_t getSPIOutputFIFOAvailable(void* spi_pointer, int32_t *status);
- uint16_t getSPINumReceived(void* spi_pointer, int32_t *status);
- bool isSPIDone(void* spi_pointer, int32_t *status);
- bool hadSPIReceiveOverflow(void* spi_pointer, int32_t *status);
- void writeSPI(void* spi_pointer, uint32_t data, int32_t *status);
- uint32_t readSPI(void* spi_pointer, bool initiate, int32_t *status);
- void resetSPI(void* spi_pointer, int32_t *status);
- void clearSPIReceivedData(void* spi_pointer, int32_t *status);
-
- bool doI2CTransaction(uint8_t address, bool compatibilityMode, uint8_t *dataToSend,
- uint8_t sendSize, uint8_t *dataReceived, uint8_t receiveSize,
- int32_t *status);
- bool doI2CTransactionWithModule(uint8_t module, uint8_t address, bool compatibilityMode,
- uint8_t *dataToSend, uint8_t sendSize, uint8_t *dataReceived,
- uint8_t receiveSize, int32_t *status);
-
- //// Float JNA Hack
- // double
- void setPWMRateIntHack(int rate, int32_t *status);
- void setPWMRateWithModuleIntHack(uint8_t module, int32_t rate, int32_t *status);
- void setPWMDutyCycleIntHack(void* pwmGenerator, int32_t dutyCycle, int32_t *status);
- void setPWMDutyCycleWithModuleIntHack(uint8_t module, void* pwmGenerator, int32_t dutyCycle, int32_t *status);
-}
-#endif
diff --git a/hal/include/HAL/Digital.hpp b/hal/include/HAL/Digital.hpp
new file mode 100644
index 0000000000..774bee8313
--- /dev/null
+++ b/hal/include/HAL/Digital.hpp
@@ -0,0 +1,159 @@
+#pragma once
+#ifdef __vxworks
+#include
+#else
+#include
+#endif
+
+enum Mode
+{
+ kTwoPulse = 0,
+ kSemiperiod = 1,
+ kPulseLength = 2,
+ kExternalDirection = 3
+};
+enum tSPIConstants
+{
+ kReceiveFIFODepth = 512,
+ kTransmitFIFODepth = 512
+};
+enum tFrameMode
+{
+ kChipSelect,
+ kPreLatchPulse,
+ kPostLatchPulse,
+ kPreAndPostLatchPulse
+};
+extern "C"
+{
+ void* initializeDigitalPort(void* port_pointer, int32_t *status);
+ bool checkDigitalModule(uint8_t module);
+ bool checkPWMChannel(void* digital_port_pointer);
+ bool checkRelayChannel(void* digital_port_pointer);
+ uint8_t remapDigitalChannel(uint32_t pin, int32_t *status);
+ uint8_t unmapDigitalChannel(uint32_t pin, int32_t *status);
+
+ void setPWM(void* digital_port_pointer, unsigned short value, int32_t *status);
+ unsigned short getPWM(void* digital_port_pointer, int32_t *status);
+ void setPWMPeriodScale(void* digital_port_pointer, uint32_t squelchMask, int32_t *status);
+ void* allocatePWM(int32_t *status);
+ void* allocatePWMWithModule(uint8_t module, int32_t *status);
+ void freePWM(void* pwmGenerator, int32_t *status);
+ void freePWMWithModule(uint8_t module, void* pwmGenerator, int32_t *status);
+ void setPWMRate(double rate, int32_t *status);
+ void setPWMRateWithModule(uint8_t module, double rate, int32_t *status);
+ void setPWMDutyCycle(void* pwmGenerator, double dutyCycle, int32_t *status);
+ void setPWMDutyCycleWithModule(uint8_t module, void* pwmGenerator, double dutyCycle,
+ int32_t *status);
+ void setPWMOutputChannel(void* pwmGenerator, uint32_t pin, int32_t *status);
+ void setPWMOutputChannelWithModule(uint8_t module, void* pwmGenerator, uint32_t pin,
+ int32_t *status);
+
+ void setRelayForward(void* digital_port_pointer, bool on, int32_t *status);
+ void setRelayReverse(void* digital_port_pointer, bool on, int32_t *status);
+ bool getRelayForward(void* digital_port_pointer, int32_t *status);
+ bool getRelayReverse(void* digital_port_pointer, int32_t *status);
+
+ bool allocateDIO(void* digital_port_pointer, bool input, int32_t *status);
+ void freeDIO(void* digital_port_pointer, int32_t *status);
+ void setDIO(void* digital_port_pointer, short value, int32_t *status);
+ bool getDIO(void* digital_port_pointer, int32_t *status);
+ bool getDIODirection(void* digital_port_pointer, int32_t *status);
+ void pulse(void* digital_port_pointer, double pulseLength, int32_t *status);
+ bool isPulsing(void* digital_port_pointer, int32_t *status);
+ bool isAnyPulsing(int32_t *status);
+ bool isAnyPulsingWithModule(uint8_t module, int32_t *status);
+
+ void* initializeCounter(Mode mode, uint32_t *index, int32_t *status);
+ void freeCounter(void* counter_pointer, int32_t *status);
+ void setCounterAverageSize(void* counter_pointer, int32_t size, int32_t *status);
+ void setCounterUpSourceWithModule(void* counter_pointer, uint8_t module, uint32_t pin,
+ bool analogTrigger, int32_t *status); // TODO: Without Module
+ void setCounterUpSourceEdge(void* counter_pointer, bool risingEdge, bool fallingEdge,
+ int32_t *status);
+ void clearCounterUpSource(void* counter_pointer, int32_t *status);
+ void setCounterDownSourceWithModule(void* counter_pointer, uint8_t module, uint32_t pin,
+ bool analogTrigger, int32_t *status); // TODO: Without Module
+ void setCounterDownSourceEdge(void* counter_pointer, bool risingEdge, bool fallingEdge,
+ int32_t *status);
+ void clearCounterDownSource(void* counter_pointer, int32_t *status);
+ void setCounterUpDownMode(void* counter_pointer, int32_t *status);
+ void setCounterExternalDirectionMode(void* counter_pointer, int32_t *status);
+ void setCounterSemiPeriodMode(void* counter_pointer, bool highSemiPeriod, int32_t *status);
+ void setCounterPulseLengthMode(void* counter_pointer, double threshold, int32_t *status);
+ int32_t getCounterSamplesToAverage(void* counter_pointer, int32_t *status);
+ void setCounterSamplesToAverage(void* counter_pointer, int samplesToAverage, int32_t *status);
+ void startCounter(void* counter_pointer, int32_t *status);
+ void stopCounter(void* counter_pointer, int32_t *status);
+ void resetCounter(void* counter_pointer, int32_t *status);
+ int32_t getCounter(void* counter_pointer, int32_t *status);
+ double getCounterPeriod(void* counter_pointer, int32_t *status);
+ void setCounterMaxPeriod(void* counter_pointer, double maxPeriod, int32_t *status);
+ void setCounterUpdateWhenEmpty(void* counter_pointer, bool enabled, int32_t *status);
+ bool getCounterStopped(void* counter_pointer, int32_t *status);
+ bool getCounterDirection(void* counter_pointer, int32_t *status);
+ void setCounterReverseDirection(void* counter_pointer, bool reverseDirection, int32_t *status);
+
+ void* initializeEncoder(uint8_t port_a_module, uint32_t port_a_pin, bool port_a_analog_trigger,
+ uint8_t port_b_module, uint32_t port_b_pin, bool port_b_analog_trigger,
+ bool reverseDirection, int32_t *index, int32_t *status); // TODO: fix routing
+ void freeEncoder(void* encoder_pointer, int32_t *status);
+ void startEncoder(void* encoder_pointer, int32_t *status);
+ void stopEncoder(void* encoder_pointer, int32_t *status);
+ void resetEncoder(void* encoder_pointer, int32_t *status);
+ int32_t getEncoder(void* encoder_pointer, int32_t *status); // Raw value
+ double getEncoderPeriod(void* encoder_pointer, int32_t *status);
+ void setEncoderMaxPeriod(void* encoder_pointer, double maxPeriod, int32_t *status);
+ bool getEncoderStopped(void* encoder_pointer, int32_t *status);
+ bool getEncoderDirection(void* encoder_pointer, int32_t *status);
+ void setEncoderReverseDirection(void* encoder_pointer, bool reverseDirection, int32_t *status);
+ void setEncoderSamplesToAverage(void* encoder_pointer, uint32_t samplesToAverage,
+ int32_t *status);
+ uint32_t getEncoderSamplesToAverage(void* encoder_pointer, int32_t *status);
+
+ uint16_t getLoopTiming(int32_t *status);
+ uint16_t getLoopTimingWithModule(uint8_t module, int32_t *status);
+
+ void* initializeSPI(uint8_t sclk_routing_module, uint32_t sclk_routing_pin,
+ uint8_t mosi_routing_module, uint32_t mosi_routing_pin, uint8_t miso_routing_module,
+ uint32_t miso_routing_pin, int32_t *status);
+ void cleanSPI(void* spi_pointer, int32_t *status);
+ void setSPIBitsPerWord(void* spi_pointer, uint32_t bits, int32_t *status);
+ uint32_t getSPIBitsPerWord(void* spi_pointer, int32_t *status);
+ void setSPIClockRate(void* spi_pointer, double hz, int32_t *status);
+ void setSPIMSBFirst(void* spi_pointer, int32_t *status);
+ void setSPILSBFirst(void* spi_pointer, int32_t *status);
+ void setSPISampleDataOnFalling(void* spi_pointer, int32_t *status);
+ void setSPISampleDataOnRising(void* spi_pointer, int32_t *status);
+ void setSPISlaveSelect(void* spi_pointer, uint8_t ss_routing_module, uint32_t ss_routing_pin,
+ int32_t *status);
+ void setSPILatchMode(void* spi_pointer, tFrameMode mode, int32_t *status);
+ tFrameMode getSPILatchMode(void* spi_pointer, int32_t *status);
+ void setSPIFramePolarity(void* spi_pointer, bool activeLow, int32_t *status);
+ bool getSPIFramePolarity(void* spi_pointer, int32_t *status);
+ void setSPIClockActiveLow(void* spi_pointer, int32_t *status);
+ void setSPIClockActiveHigh(void* spi_pointer, int32_t *status);
+ void applySPIConfig(void* spi_pointer, int32_t *status);
+ uint16_t getSPIOutputFIFOAvailable(void* spi_pointer, int32_t *status);
+ uint16_t getSPINumReceived(void* spi_pointer, int32_t *status);
+ bool isSPIDone(void* spi_pointer, int32_t *status);
+ bool hadSPIReceiveOverflow(void* spi_pointer, int32_t *status);
+ void writeSPI(void* spi_pointer, uint32_t data, int32_t *status);
+ uint32_t readSPI(void* spi_pointer, bool initiate, int32_t *status);
+ void resetSPI(void* spi_pointer, int32_t *status);
+ void clearSPIReceivedData(void* spi_pointer, int32_t *status);
+
+ bool doI2CTransaction(uint8_t address, bool compatibilityMode, uint8_t *dataToSend,
+ uint8_t sendSize, uint8_t *dataReceived, uint8_t receiveSize, int32_t *status);
+ bool doI2CTransactionWithModule(uint8_t module, uint8_t address, bool compatibilityMode,
+ uint8_t *dataToSend, uint8_t sendSize, uint8_t *dataReceived, uint8_t receiveSize,
+ int32_t *status);
+
+ //// Float JNA Hack
+ // double
+ void setPWMRateIntHack(int rate, int32_t *status);
+ void setPWMRateWithModuleIntHack(uint8_t module, int32_t rate, int32_t *status);
+ void setPWMDutyCycleIntHack(void* pwmGenerator, int32_t dutyCycle, int32_t *status);
+ void setPWMDutyCycleWithModuleIntHack(uint8_t module, void* pwmGenerator, int32_t dutyCycle,
+ int32_t *status);
+}
diff --git a/hal/include/HAL/Errors.h b/hal/include/HAL/Errors.hpp
similarity index 96%
rename from hal/include/HAL/Errors.h
rename to hal/include/HAL/Errors.hpp
index 6d516e5e35..46b5ee3044 100644
--- a/hal/include/HAL/Errors.h
+++ b/hal/include/HAL/Errors.hpp
@@ -1,6 +1,4 @@
-
-#ifndef HAL_ERRORS_H
-#define HAL_ERRORS_H
+#pragma once
#define SAMPLE_RATE_TOO_HIGH 1
#define SAMPLE_RATE_TOO_HIGH_MESSAGE "Analog module sample rate is too high"
@@ -26,5 +24,3 @@
#define ANALOG_TRIGGER_PULSE_OUTPUT_ERROR_MESSAGE "Attempted to read AnalogTrigger pulse output."
#define PARAMETER_OUT_OF_RANGE -28
#define PARAMETER_OUT_OF_RANGE_MESSAGE "A parameter is out of range."
-
-#endif
diff --git a/hal/include/HAL/HAL.h b/hal/include/HAL/HAL.h
deleted file mode 100644
index 31a323fbd5..0000000000
--- a/hal/include/HAL/HAL.h
+++ /dev/null
@@ -1,300 +0,0 @@
-/*----------------------------------------------------------------------------*/
-/* Copyright (c) FIRST 2013. All Rights Reserved. */
-/* Open Source Software - may be modified and shared by FRC teams. The code */
-/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
-/*----------------------------------------------------------------------------*/
-
-#ifdef __vxworks
-#include
-#else
-#include
-#endif
-#include
-
-#include "Analog.h"
-#include "Digital.h"
-#include "Solenoid.h"
-#include "Notifier.h"
-#include "Interrupts.h"
-#include "Errors.h"
-
-#include "Utilities.h"
-#include "Semaphore.h"
-#include "Task.h"
-
-#ifndef HAL_H
-#define HAL_H
-
-#define HAL_IO_CONFIG_DATA_SIZE 32
-#define HAL_SYS_STATUS_DATA_SIZE 44
-#define HAL_USER_STATUS_DATA_SIZE (984 - HAL_IO_CONFIG_DATA_SIZE - HAL_SYS_STATUS_DATA_SIZE)
-#define HAL_USER_DS_LCD_DATA_SIZE 128
-
-
-#define HALFRC_NetworkCommunication_DynamicType_DSEnhancedIO_Input 17
-#define HALFRC_NetworkCommunication_DynamicType_DSEnhancedIO_Output 18
-#define HALFRC_NetworkCommunication_DynamicType_Kinect_Header 19
-#define HALFRC_NetworkCommunication_DynamicType_Kinect_Extra1 20
-#define HALFRC_NetworkCommunication_DynamicType_Kinect_Vertices1 21
-#define HALFRC_NetworkCommunication_DynamicType_Kinect_Extra2 22
-#define HALFRC_NetworkCommunication_DynamicType_Kinect_Vertices2 23
-#define HALFRC_NetworkCommunication_DynamicType_Kinect_Joystick 24
-#define HALFRC_NetworkCommunication_DynamicType_Kinect_Custom 25
-
-namespace HALUsageReporting
-{
- typedef enum
- {
- kResourceType_Controller,
- kResourceType_Module,
- kResourceType_Language,
- kResourceType_CANPlugin,
- kResourceType_Accelerometer,
- kResourceType_ADXL345,
- kResourceType_AnalogChannel,
- kResourceType_AnalogTrigger,
- kResourceType_AnalogTriggerOutput,
- kResourceType_CANJaguar,
- kResourceType_Compressor,
- kResourceType_Counter,
- kResourceType_Dashboard,
- kResourceType_DigitalInput,
- kResourceType_DigitalOutput,
- kResourceType_DriverStationCIO,
- kResourceType_DriverStationEIO,
- kResourceType_DriverStationLCD,
- kResourceType_Encoder,
- kResourceType_GearTooth,
- kResourceType_Gyro,
- kResourceType_I2C,
- kResourceType_Framework,
- kResourceType_Jaguar,
- kResourceType_Joystick,
- kResourceType_Kinect,
- kResourceType_KinectStick,
- kResourceType_PIDController,
- kResourceType_Preferences,
- kResourceType_PWM,
- kResourceType_Relay,
- kResourceType_RobotDrive,
- kResourceType_SerialPort,
- kResourceType_Servo,
- kResourceType_Solenoid,
- kResourceType_SPI,
- kResourceType_Task,
- kResourceType_Ultrasonic,
- kResourceType_Victor,
- kResourceType_Button,
- kResourceType_Command,
- kResourceType_AxisCamera,
- kResourceType_PCVideoServer,
- kResourceType_SmartDashboard,
- kResourceType_Talon,
- kResourceType_HiTechnicColorSensor,
- kResourceType_HiTechnicAccel,
- kResourceType_HiTechnicCompass,
- kResourceType_SRF08,
- } tResourceType;
-
- typedef enum
- {
- kLanguage_LabVIEW = 1,
- kLanguage_CPlusPlus = 2,
- kLanguage_Java = 3,
- kLanguage_Python = 4,
-
- kCANPlugin_BlackJagBridge = 1,
- kCANPlugin_2CAN = 2,
-
- kFramework_Iterative = 1,
- kFramework_Simple = 2,
-
- kRobotDrive_ArcadeStandard = 1,
- kRobotDrive_ArcadeButtonSpin = 2,
- kRobotDrive_ArcadeRatioCurve = 3,
- kRobotDrive_Tank = 4,
- kRobotDrive_MecanumPolar = 5,
- kRobotDrive_MecanumCartesian = 6,
-
- kDriverStationCIO_Analog = 1,
- kDriverStationCIO_DigitalIn = 2,
- kDriverStationCIO_DigitalOut = 3,
-
- kDriverStationEIO_Acceleration = 1,
- kDriverStationEIO_AnalogIn = 2,
- kDriverStationEIO_AnalogOut = 3,
- kDriverStationEIO_Button = 4,
- kDriverStationEIO_LED = 5,
- kDriverStationEIO_DigitalIn = 6,
- kDriverStationEIO_DigitalOut = 7,
- kDriverStationEIO_FixedDigitalOut = 8,
- kDriverStationEIO_PWM = 9,
- kDriverStationEIO_Encoder = 10,
- kDriverStationEIO_TouchSlider = 11,
-
- kADXL345_SPI = 1,
- kADXL345_I2C = 2,
-
- kCommand_Scheduler = 1,
-
- kSmartDashboard_Instance = 1,
- } tInstances;
-}
-
-struct HALCommonControlData{
- uint16_t packetIndex;
- union {
- uint8_t control;
-#ifndef __vxworks
- struct {
- uint8_t checkVersions :1;
- uint8_t test :1;
- uint8_t resync : 1;
- uint8_t fmsAttached:1;
- uint8_t autonomous : 1;
- uint8_t enabled : 1;
- uint8_t notEStop : 1;
- uint8_t reset : 1;
- };
-#else
- struct {
- uint8_t reset : 1;
- uint8_t notEStop : 1;
- uint8_t enabled : 1;
- uint8_t autonomous : 1;
- uint8_t fmsAttached:1;
- uint8_t resync : 1;
- uint8_t test :1;
- uint8_t checkVersions :1;
- };
-#endif
- };
- uint8_t dsDigitalIn;
- uint16_t teamID;
-
- char dsID_Alliance;
- char dsID_Position;
-
- union {
- int8_t stick0Axes[6];
- struct {
- int8_t stick0Axis1;
- int8_t stick0Axis2;
- int8_t stick0Axis3;
- int8_t stick0Axis4;
- int8_t stick0Axis5;
- int8_t stick0Axis6;
- };
- };
- uint16_t stick0Buttons; // Left-most 4 bits are unused
-
- union {
- int8_t stick1Axes[6];
- struct {
- int8_t stick1Axis1;
- int8_t stick1Axis2;
- int8_t stick1Axis3;
- int8_t stick1Axis4;
- int8_t stick1Axis5;
- int8_t stick1Axis6;
- };
- };
- uint16_t stick1Buttons; // Left-most 4 bits are unused
-
- union {
- int8_t stick2Axes[6];
- struct {
- int8_t stick2Axis1;
- int8_t stick2Axis2;
- int8_t stick2Axis3;
- int8_t stick2Axis4;
- int8_t stick2Axis5;
- int8_t stick2Axis6;
- };
- };
- uint16_t stick2Buttons; // Left-most 4 bits are unused
-
- union {
- int8_t stick3Axes[6];
- struct {
- int8_t stick3Axis1;
- int8_t stick3Axis2;
- int8_t stick3Axis3;
- int8_t stick3Axis4;
- int8_t stick3Axis5;
- int8_t stick3Axis6;
- };
- };
- uint16_t stick3Buttons; // Left-most 4 bits are unused
-
- //Analog inputs are 10 bit right-justified
- uint16_t analog1;
- uint16_t analog2;
- uint16_t analog3;
- uint16_t analog4;
-
- uint64_t cRIOChecksum;
- uint32_t FPGAChecksum0;
- uint32_t FPGAChecksum1;
- uint32_t FPGAChecksum2;
- uint32_t FPGAChecksum3;
-
- char versionData[8];
-};
-
-
-inline float intToFloat(int value) {
- return (float)value;
-}
-
-inline int floatToInt(float value) {
- return round(value);
-}
-
-extern "C" {
- extern const uint32_t dio_kNumSystems;
- extern const uint32_t solenoid_kNumDO7_0Elements;
- extern const uint32_t interrupt_kNumSystems;
- extern const uint32_t kSystemClockTicksPerMicrosecond;
-
- void* getPort(uint8_t pin);
- void* getPortWithModule(uint8_t module, uint8_t pin);
- const char* getHALErrorMessage(int32_t code);
-
- uint16_t getFPGAVersion(int32_t *status);
- uint32_t getFPGARevision(int32_t *status);
- uint32_t getFPGATime(int32_t *status);
-
- void setFPGALED(uint32_t state, int32_t *status);
- int32_t getFPGALED(int32_t *status);
-
- int HALSetErrorData(const char *errors, int errorsLength, int wait_ms);
- int HALSetUserDsLcdData(const char *userDsLcdData, int userDsLcdDataLength, int wait_ms);
- int HALOverrideIOConfig(const char *ioConfig, int wait_ms);
- int HALGetDynamicControlData(uint8_t type, char *dynamicData, int32_t maxLength, int wait_ms);
- int HALGetCommonControlData(HALCommonControlData *data, int wait_ms);
- void HALSetNewDataSem(pthread_mutex_t *);
- int HALSetStatusData(float battery, uint8_t dsDigitalOut, uint8_t updateNumber,
- const char *userDataHigh, int userDataHighLength,
- const char *userDataLow, int userDataLowLength, int wait_ms);
-
- void HALNetworkCommunicationReserve();
- void HALNetworkCommunicationObserveUserProgramStarting(void);
- void HALNetworkCommunicationObserveUserProgramDisabled(void);
- void HALNetworkCommunicationObserveUserProgramAutonomous(void);
- void HALNetworkCommunicationObserveUserProgramTeleop(void);
- void HALNetworkCommunicationObserveUserProgramTest(void);
-
- uint32_t HALReport(uint8_t resource, uint8_t instanceNumber, uint8_t context = 0, const char *feature = NULL);
-}
-
-// TODO: HACKS for now...
-extern "C" {
- //void FRC_NetworkCommunication_Reserve();
-
- void NumericArrayResize();
- void RTSetCleanupProc();
- void EDVR_CreateReference();
- void Occur();
-}
-#endif
diff --git a/hal/include/HAL/HAL.hpp b/hal/include/HAL/HAL.hpp
new file mode 100644
index 0000000000..88741b7843
--- /dev/null
+++ b/hal/include/HAL/HAL.hpp
@@ -0,0 +1,312 @@
+/*----------------------------------------------------------------------------*/
+/* Copyright (c) FIRST 2013. All Rights Reserved. */
+/* Open Source Software - may be modified and shared by FRC teams. The code */
+/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
+/*----------------------------------------------------------------------------*/
+#pragma once
+
+#ifdef __vxworks
+#include
+#else
+#include
+#endif
+#include
+
+#include "Analog.hpp"
+#include "Digital.hpp"
+#include "Solenoid.hpp"
+#include "Notifier.hpp"
+#include "Interrupts.hpp"
+#include "Errors.hpp"
+
+#include "Utilities.hpp"
+#include "Semaphore.hpp"
+#include "Task.hpp"
+
+#define HAL_IO_CONFIG_DATA_SIZE 32
+#define HAL_SYS_STATUS_DATA_SIZE 44
+#define HAL_USER_STATUS_DATA_SIZE (984 - HAL_IO_CONFIG_DATA_SIZE - HAL_SYS_STATUS_DATA_SIZE)
+#define HAL_USER_DS_LCD_DATA_SIZE 128
+
+#define HALFRC_NetworkCommunication_DynamicType_DSEnhancedIO_Input 17
+#define HALFRC_NetworkCommunication_DynamicType_DSEnhancedIO_Output 18
+#define HALFRC_NetworkCommunication_DynamicType_Kinect_Header 19
+#define HALFRC_NetworkCommunication_DynamicType_Kinect_Extra1 20
+#define HALFRC_NetworkCommunication_DynamicType_Kinect_Vertices1 21
+#define HALFRC_NetworkCommunication_DynamicType_Kinect_Extra2 22
+#define HALFRC_NetworkCommunication_DynamicType_Kinect_Vertices2 23
+#define HALFRC_NetworkCommunication_DynamicType_Kinect_Joystick 24
+#define HALFRC_NetworkCommunication_DynamicType_Kinect_Custom 25
+
+namespace HALUsageReporting
+{
+ enum tResourceType
+ {
+ kResourceType_Controller,
+ kResourceType_Module,
+ kResourceType_Language,
+ kResourceType_CANPlugin,
+ kResourceType_Accelerometer,
+ kResourceType_ADXL345,
+ kResourceType_AnalogChannel,
+ kResourceType_AnalogTrigger,
+ kResourceType_AnalogTriggerOutput,
+ kResourceType_CANJaguar,
+ kResourceType_Compressor,
+ kResourceType_Counter,
+ kResourceType_Dashboard,
+ kResourceType_DigitalInput,
+ kResourceType_DigitalOutput,
+ kResourceType_DriverStationCIO,
+ kResourceType_DriverStationEIO,
+ kResourceType_DriverStationLCD,
+ kResourceType_Encoder,
+ kResourceType_GearTooth,
+ kResourceType_Gyro,
+ kResourceType_I2C,
+ kResourceType_Framework,
+ kResourceType_Jaguar,
+ kResourceType_Joystick,
+ kResourceType_Kinect,
+ kResourceType_KinectStick,
+ kResourceType_PIDController,
+ kResourceType_Preferences,
+ kResourceType_PWM,
+ kResourceType_Relay,
+ kResourceType_RobotDrive,
+ kResourceType_SerialPort,
+ kResourceType_Servo,
+ kResourceType_Solenoid,
+ kResourceType_SPI,
+ kResourceType_Task,
+ kResourceType_Ultrasonic,
+ kResourceType_Victor,
+ kResourceType_Button,
+ kResourceType_Command,
+ kResourceType_AxisCamera,
+ kResourceType_PCVideoServer,
+ kResourceType_SmartDashboard,
+ kResourceType_Talon,
+ kResourceType_HiTechnicColorSensor,
+ kResourceType_HiTechnicAccel,
+ kResourceType_HiTechnicCompass,
+ kResourceType_SRF08,
+ };
+
+ enum tInstances
+ {
+ kLanguage_LabVIEW = 1,
+ kLanguage_CPlusPlus = 2,
+ kLanguage_Java = 3,
+ kLanguage_Python = 4,
+
+ kCANPlugin_BlackJagBridge = 1,
+ kCANPlugin_2CAN = 2,
+
+ kFramework_Iterative = 1,
+ kFramework_Simple = 2,
+
+ kRobotDrive_ArcadeStandard = 1,
+ kRobotDrive_ArcadeButtonSpin = 2,
+ kRobotDrive_ArcadeRatioCurve = 3,
+ kRobotDrive_Tank = 4,
+ kRobotDrive_MecanumPolar = 5,
+ kRobotDrive_MecanumCartesian = 6,
+
+ kDriverStationCIO_Analog = 1,
+ kDriverStationCIO_DigitalIn = 2,
+ kDriverStationCIO_DigitalOut = 3,
+
+ kDriverStationEIO_Acceleration = 1,
+ kDriverStationEIO_AnalogIn = 2,
+ kDriverStationEIO_AnalogOut = 3,
+ kDriverStationEIO_Button = 4,
+ kDriverStationEIO_LED = 5,
+ kDriverStationEIO_DigitalIn = 6,
+ kDriverStationEIO_DigitalOut = 7,
+ kDriverStationEIO_FixedDigitalOut = 8,
+ kDriverStationEIO_PWM = 9,
+ kDriverStationEIO_Encoder = 10,
+ kDriverStationEIO_TouchSlider = 11,
+
+ kADXL345_SPI = 1,
+ kADXL345_I2C = 2,
+
+ kCommand_Scheduler = 1,
+
+ kSmartDashboard_Instance = 1,
+ };
+}
+
+struct HALCommonControlData
+{
+ uint16_t packetIndex;
+ union
+ {
+ uint8_t control;
+#ifndef __vxworks
+ struct
+ {
+ uint8_t checkVersions :1;
+ uint8_t test :1;
+ uint8_t resync :1;
+ uint8_t fmsAttached :1;
+ uint8_t autonomous :1;
+ uint8_t enabled :1;
+ uint8_t notEStop :1;
+ uint8_t reset :1;
+ };
+#else
+ struct
+ {
+ uint8_t reset : 1;
+ uint8_t notEStop : 1;
+ uint8_t enabled : 1;
+ uint8_t autonomous : 1;
+ uint8_t fmsAttached:1;
+ uint8_t resync : 1;
+ uint8_t test :1;
+ uint8_t checkVersions :1;
+ };
+#endif
+ };
+ uint8_t dsDigitalIn;
+ uint16_t teamID;
+
+ char dsID_Alliance;
+ char dsID_Position;
+
+ union
+ {
+ int8_t stick0Axes[6];
+ struct
+ { // TODO: ???
+ int8_t stick0Axis1;
+ int8_t stick0Axis2;
+ int8_t stick0Axis3;
+ int8_t stick0Axis4;
+ int8_t stick0Axis5;
+ int8_t stick0Axis6;
+ };
+ };
+ uint16_t stick0Buttons; // Left-most 4 bits are unused
+
+ union
+ {
+ int8_t stick1Axes[6];
+ struct
+ { // TODO: ???
+ int8_t stick1Axis1;
+ int8_t stick1Axis2;
+ int8_t stick1Axis3;
+ int8_t stick1Axis4;
+ int8_t stick1Axis5;
+ int8_t stick1Axis6;
+ };
+ };
+ uint16_t stick1Buttons; // Left-most 4 bits are unused
+
+ union
+ {
+ int8_t stick2Axes[6];
+ struct
+ { // TODO: ???
+ int8_t stick2Axis1;
+ int8_t stick2Axis2;
+ int8_t stick2Axis3;
+ int8_t stick2Axis4;
+ int8_t stick2Axis5;
+ int8_t stick2Axis6;
+ };
+ };
+ uint16_t stick2Buttons; // Left-most 4 bits are unused
+
+ union
+ {
+ int8_t stick3Axes[6];
+ struct
+ { // TODO: ???
+ int8_t stick3Axis1;
+ int8_t stick3Axis2;
+ int8_t stick3Axis3;
+ int8_t stick3Axis4;
+ int8_t stick3Axis5;
+ int8_t stick3Axis6;
+ };
+ };
+ uint16_t stick3Buttons; // Left-most 4 bits are unused
+
+ //Analog inputs are 10 bit right-justified
+ uint16_t analog1;
+ uint16_t analog2;
+ uint16_t analog3;
+ uint16_t analog4;
+
+ uint64_t cRIOChecksum;
+ uint32_t FPGAChecksum0;
+ uint32_t FPGAChecksum1;
+ uint32_t FPGAChecksum2;
+ uint32_t FPGAChecksum3;
+
+ char versionData[8];
+};
+
+inline float intToFloat(int value)
+{
+ return (float)value;
+}
+
+inline int floatToInt(float value)
+{
+ return round(value);
+}
+
+extern "C"
+{
+ extern const uint32_t dio_kNumSystems;
+ extern const uint32_t solenoid_kNumDO7_0Elements;
+ extern const uint32_t interrupt_kNumSystems;
+ extern const uint32_t kSystemClockTicksPerMicrosecond;
+
+ void* getPort(uint8_t pin);
+ void* getPortWithModule(uint8_t module, uint8_t pin);
+ const char* getHALErrorMessage(int32_t code);
+
+ uint16_t getFPGAVersion(int32_t *status);
+ uint32_t getFPGARevision(int32_t *status);
+ uint32_t getFPGATime(int32_t *status);
+
+ void setFPGALED(uint32_t state, int32_t *status);
+ int32_t getFPGALED(int32_t *status);
+
+ int HALSetErrorData(const char *errors, int errorsLength, int wait_ms);
+ int HALSetUserDsLcdData(const char *userDsLcdData, int userDsLcdDataLength, int wait_ms);
+ int HALOverrideIOConfig(const char *ioConfig, int wait_ms);
+ int HALGetDynamicControlData(uint8_t type, char *dynamicData, int32_t maxLength, int wait_ms);
+ int HALGetCommonControlData(HALCommonControlData *data, int wait_ms);
+ void HALSetNewDataSem(pthread_mutex_t *);
+ int HALSetStatusData(float battery, uint8_t dsDigitalOut, uint8_t updateNumber,
+ const char *userDataHigh, int userDataHighLength, const char *userDataLow,
+ int userDataLowLength, int wait_ms);
+
+ int HALInitialize(int mode = 0);
+ void HALNetworkCommunicationObserveUserProgramStarting();
+ void HALNetworkCommunicationObserveUserProgramDisabled();
+ void HALNetworkCommunicationObserveUserProgramAutonomous();
+ void HALNetworkCommunicationObserveUserProgramTeleop();
+ void HALNetworkCommunicationObserveUserProgramTest();
+
+ uint32_t HALReport(uint8_t resource, uint8_t instanceNumber, uint8_t context = 0,
+ const char *feature = NULL);
+}
+
+// TODO: HACKS for now...
+extern "C"
+{
+
+ void NumericArrayResize();
+ void RTSetCleanupProc();
+ void EDVR_CreateReference();
+ void Occur();
+}
+
diff --git a/hal/include/HAL/Interrupts.h b/hal/include/HAL/Interrupts.h
deleted file mode 100644
index ad85afed4f..0000000000
--- a/hal/include/HAL/Interrupts.h
+++ /dev/null
@@ -1,27 +0,0 @@
-
-#ifdef __vxworks
-#include
-#else
-#include
-#endif
-
-#ifndef HAL_INTERRUPTS_H
-#define HAL_INTERRUPTS_H
-
-extern "C" {
- typedef void (*InterruptHandlerFunction)(uint32_t interruptAssertedMask, void *param);
-
- void* initializeInterrupts(uint32_t interruptIndex, bool watcher, int32_t *status);
- void cleanInterrupts(void* interrupt_pointer, int32_t *status);
-
- void waitForInterrupt(void* interrupt_pointer, double timeout, int32_t *status);
- void enableInterrupts(void* interrupt_pointer, int32_t *status);
- void disableInterrupts(void* interrupt_pointer, int32_t *status);
- double readInterruptTimestamp(void* interrupt_pointer, int32_t *status);
- void requestInterrupts(void* interrupt_pointer, uint8_t routing_module, uint32_t routing_pin,
- bool routing_analog_trigger, int32_t *status);
- void attachInterruptHandler(void* interrupt_pointer, InterruptHandlerFunction handler,
- void* param, int32_t *status);
- void setInterruptUpSourceEdge(void* interrupt_pointer, bool risingEdge, bool fallingEdge, int32_t *status);
-}
-#endif
diff --git a/hal/include/HAL/Interrupts.hpp b/hal/include/HAL/Interrupts.hpp
new file mode 100644
index 0000000000..4406cc1565
--- /dev/null
+++ b/hal/include/HAL/Interrupts.hpp
@@ -0,0 +1,26 @@
+#pragma once
+
+#ifdef __vxworks
+#include
+#else
+#include
+#endif
+
+extern "C"
+{
+ typedef void (*InterruptHandlerFunction)(uint32_t interruptAssertedMask, void *param);
+
+ void* initializeInterrupts(uint32_t interruptIndex, bool watcher, int32_t *status);
+ void cleanInterrupts(void* interrupt_pointer, int32_t *status);
+
+ void waitForInterrupt(void* interrupt_pointer, double timeout, int32_t *status);
+ void enableInterrupts(void* interrupt_pointer, int32_t *status);
+ void disableInterrupts(void* interrupt_pointer, int32_t *status);
+ double readInterruptTimestamp(void* interrupt_pointer, int32_t *status);
+ void requestInterrupts(void* interrupt_pointer, uint8_t routing_module, uint32_t routing_pin,
+ bool routing_analog_trigger, int32_t *status);
+ void attachInterruptHandler(void* interrupt_pointer, InterruptHandlerFunction handler,
+ void* param, int32_t *status);
+ void setInterruptUpSourceEdge(void* interrupt_pointer, bool risingEdge, bool fallingEdge,
+ int32_t *status);
+}
diff --git a/hal/include/HAL/Notifier.h b/hal/include/HAL/Notifier.h
deleted file mode 100644
index 6bb7321944..0000000000
--- a/hal/include/HAL/Notifier.h
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#ifdef __vxworks
-#include
-#else
-#include
-#endif
-
-#ifndef HAL_NOTIFIER_H
-#define HAL_NOTIFIER_H
-
-extern "C" {
- void* initializeNotifier(void (*ProcessQueue)(uint32_t, void*), int32_t *status);
- void cleanNotifier(void* notifier_pointer, int32_t *status);
-
- void updateNotifierAlarm(void* notifier_pointer, uint32_t triggerTime, int32_t *status);
-}
-#endif
diff --git a/hal/include/HAL/Notifier.hpp b/hal/include/HAL/Notifier.hpp
new file mode 100644
index 0000000000..987686caca
--- /dev/null
+++ b/hal/include/HAL/Notifier.hpp
@@ -0,0 +1,15 @@
+#pragma once
+
+#ifdef __vxworks
+#include
+#else
+#include
+#endif
+
+extern "C"
+{
+ void* initializeNotifier(void (*ProcessQueue)(uint32_t, void*), int32_t *status);
+ void cleanNotifier(void* notifier_pointer, int32_t *status);
+
+ void updateNotifierAlarm(void* notifier_pointer, uint32_t triggerTime, int32_t *status);
+}
diff --git a/hal/include/HAL/Semaphore.h b/hal/include/HAL/Semaphore.hpp
similarity index 81%
rename from hal/include/HAL/Semaphore.h
rename to hal/include/HAL/Semaphore.hpp
index 61494e8e79..bc3e268354 100644
--- a/hal/include/HAL/Semaphore.h
+++ b/hal/include/HAL/Semaphore.hpp
@@ -1,3 +1,4 @@
+#pragma once
#ifdef __vxworks
#include
@@ -7,20 +8,18 @@
#include
#endif
-#ifndef HAL_SEMAPHORE_H
-#define HAL_SEMAPHORE_H
-
-extern "C" {
#ifdef __vxworks
- typedef SEM_ID MUTEX_ID;
- typedef SEM_ID SEMAPHORE_ID;
- typedef SEM_ID MULTIWAIT_ID;
+typedef SEM_ID MUTEX_ID;
+typedef SEM_ID SEMAPHORE_ID;
+typedef SEM_ID MULTIWAIT_ID;
#else
- typedef pthread_mutex_t* MUTEX_ID;
- typedef sem_t* SEMAPHORE_ID;
- typedef pthread_cond_t* MULTIWAIT_ID;
+typedef pthread_mutex_t* MUTEX_ID;
+typedef sem_t* SEMAPHORE_ID;
+typedef pthread_cond_t* MULTIWAIT_ID;
#endif
+extern "C"
+{
extern const uint32_t SEMAPHORE_Q_FIFO;
extern const uint32_t SEMAPHORE_Q_PRIORITY;
extern const uint32_t SEMAPHORE_DELETE_SAFE;
@@ -51,4 +50,3 @@ extern "C" {
int8_t giveMultiWait(MULTIWAIT_ID sem);
}
-#endif
diff --git a/hal/include/HAL/Solenoid.h b/hal/include/HAL/Solenoid.h
deleted file mode 100644
index fb555d0252..0000000000
--- a/hal/include/HAL/Solenoid.h
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#ifdef __vxworks
-#include
-#else
-#include
-#endif
-
-#ifndef HAL_SOLENOID_H
-#define HAL_SOLENOID_H
-extern "C" {
- void* initializeSolenoidPort(void* port_pointer, int32_t *status);
- bool checkSolenoidModule(uint8_t module);
-
- bool getSolenoid(void* solenoid_port_pointer, int32_t *status);
- void setSolenoid(void* solenoid_port_pointer, bool value, int32_t *status);
-}
-#endif
diff --git a/hal/include/HAL/Solenoid.hpp b/hal/include/HAL/Solenoid.hpp
new file mode 100644
index 0000000000..90cde27aad
--- /dev/null
+++ b/hal/include/HAL/Solenoid.hpp
@@ -0,0 +1,16 @@
+#pragma once
+
+#ifdef __vxworks
+#include
+#else
+#include
+#endif
+
+extern "C"
+{
+ void* initializeSolenoidPort(void* port_pointer, int32_t *status);
+ bool checkSolenoidModule(uint8_t module);
+
+ bool getSolenoid(void* solenoid_port_pointer, int32_t *status);
+ void setSolenoid(void* solenoid_port_pointer, bool value, int32_t *status);
+}
diff --git a/hal/include/HAL/Task.h b/hal/include/HAL/Task.h
deleted file mode 100644
index 4456531d99..0000000000
--- a/hal/include/HAL/Task.h
+++ /dev/null
@@ -1,68 +0,0 @@
-
-#ifdef __vxworks
-#include
-#else
-#include
-#include
-#endif
-
-#ifndef _FUNCPTR_DEFINED
-#define _FUNCPTR_DEFINED
-#ifdef __cplusplus
-typedef int (*FUNCPTR) (...); /* ptr to function returning int */
-#else
-typedef int (*FUNCPTR) (); /* ptr to function returning int */
-#endif /* __cplusplus */
-#endif /* _FUNCPTR_DEFINED */
-
-#ifndef _STATUS_DEFINED
-#define _STATUS_DEFINED
-typedef int STATUS;
-#endif /* _STATUS_DEFINED */
-
-#ifndef OK
-#define OK 0
-#endif /* OK */
-#ifndef ERROR
-#define ERROR (-1)
-#endif /* ERROR */
-
-#ifndef HAL_TASK_H
-#define HAL_TASK_H
-
-#ifdef __vxworks
-#define NULL_TASK -1
-#else
-#define NULL_TASK NULL
-#endif
-
-extern "C" {
- extern const uint32_t VXWORKS_FP_TASK;
- extern const int32_t HAL_objLib_OBJ_ID_ERROR;
- extern const int32_t HAL_objLib_OBJ_DELETED;
- extern const int32_t HAL_taskLib_ILLEGAL_OPTIONS;
- extern const int32_t HAL_memLib_NOT_ENOUGH_MEMORY;
- extern const int32_t HAL_taskLib_ILLEGAL_PRIORITY;
-
-#ifdef __vxworks
- typedef int32_t TASK;
-#else
- typedef pthread_t* TASK;
-#endif
-
- TASK spawnTask(char * name, int priority, int options, int stackSize,
- FUNCPTR entryPt, uint32_t arg0, uint32_t arg1, uint32_t arg2,
- uint32_t arg3, uint32_t arg4, uint32_t arg5, uint32_t arg6,
- uint32_t arg7, uint32_t arg8, uint32_t arg9);
- STATUS restartTask(TASK task);
- STATUS deleteTask(TASK task);
- STATUS isTaskReady(TASK task);
- STATUS isTaskSuspended(TASK task);
- STATUS suspendTask(TASK task);
- STATUS resumeTask(TASK task);
- STATUS verifyTaskID(TASK task);
- STATUS setTaskPriority(TASK task, int priority);
- STATUS getTaskPriority(TASK task, int* priority);
-}
-
-#endif
diff --git a/hal/include/HAL/Task.hpp b/hal/include/HAL/Task.hpp
new file mode 100644
index 0000000000..87d51d89ac
--- /dev/null
+++ b/hal/include/HAL/Task.hpp
@@ -0,0 +1,62 @@
+#pragma once
+
+#ifdef __vxworks
+#include
+#else
+#include
+#include
+#endif
+
+#ifndef _FUNCPTR_DEFINED
+#define _FUNCPTR_DEFINED
+#ifdef __cplusplus
+typedef int (*FUNCPTR)(...);
+/* ptr to function returning int */
+#else
+typedef int (*FUNCPTR) (); /* ptr to function returning int */
+#endif /* __cplusplus */
+#endif /* _FUNCPTR_DEFINED */
+
+#ifndef _STATUS_DEFINED
+#define _STATUS_DEFINED
+typedef int STATUS;
+#endif /* _STATUS_DEFINED */
+
+#ifndef OK
+#define OK 0
+#endif /* OK */
+#ifndef ERROR
+#define ERROR (-1)
+#endif /* ERROR */
+
+#ifdef __vxworks
+#define NULL_TASK -1
+typedef int32_t TASK;
+#else
+#define NULL_TASK NULL
+typedef pthread_t* TASK;
+#endif
+
+extern "C"
+{
+ extern const uint32_t VXWORKS_FP_TASK;
+ extern const int32_t HAL_objLib_OBJ_ID_ERROR;
+ extern const int32_t HAL_objLib_OBJ_DELETED;
+ extern const int32_t HAL_taskLib_ILLEGAL_OPTIONS;
+ extern const int32_t HAL_memLib_NOT_ENOUGH_MEMORY;
+ extern const int32_t HAL_taskLib_ILLEGAL_PRIORITY;
+
+ TASK spawnTask(char * name, int priority, int options, int stackSize, FUNCPTR entryPt,
+ uint32_t arg0, uint32_t arg1, uint32_t arg2, uint32_t arg3, uint32_t arg4,
+ uint32_t arg5, uint32_t arg6, uint32_t arg7, uint32_t arg8, uint32_t arg9);
+ STATUS restartTask(TASK task);
+ STATUS deleteTask(TASK task);
+ STATUS isTaskReady(TASK task);
+ STATUS isTaskSuspended(TASK task);
+ STATUS suspendTask(TASK task);
+ STATUS resumeTask(TASK task);
+ STATUS verifyTaskID(TASK task);
+ STATUS setTaskPriority(TASK task, int priority);
+ STATUS getTaskPriority(TASK task, int* priority);
+}
+
diff --git a/hal/include/HAL/Utilities.h b/hal/include/HAL/Utilities.h
deleted file mode 100644
index 6e0384e194..0000000000
--- a/hal/include/HAL/Utilities.h
+++ /dev/null
@@ -1,18 +0,0 @@
-
-#ifdef __vxworks
-#include
-#else
-#include
-#endif
-
-#ifndef HAL_UTILITIES_H
-#define HAL_UTILITIES_H
-
-extern "C" {
- extern const int32_t HAL_NO_WAIT;
- extern const int32_t HAL_WAIT_FOREVER;
-
- void delayTicks(int32_t ticks);
- void delayMillis(double ms);
- void delaySeconds(double s);}
-#endif
diff --git a/hal/include/HAL/Utilities.hpp b/hal/include/HAL/Utilities.hpp
new file mode 100644
index 0000000000..b24cd29776
--- /dev/null
+++ b/hal/include/HAL/Utilities.hpp
@@ -0,0 +1,17 @@
+#pragma once
+
+#ifdef __vxworks
+#include
+#else
+#include
+#endif
+
+extern "C"
+{
+ extern const int32_t HAL_NO_WAIT;
+ extern const int32_t HAL_WAIT_FOREVER;
+
+ void delayTicks(int32_t ticks);
+ void delayMillis(double ms);
+ void delaySeconds(double s);
+}
diff --git a/hal/include/HAL/cpp/Resource.h b/hal/include/HAL/cpp/Resource.hpp
similarity index 93%
rename from hal/include/HAL/cpp/Resource.h
rename to hal/include/HAL/cpp/Resource.hpp
index 43d93e3959..41ca9139cc 100644
--- a/hal/include/HAL/cpp/Resource.h
+++ b/hal/include/HAL/cpp/Resource.hpp
@@ -3,12 +3,10 @@
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
/*----------------------------------------------------------------------------*/
+#pragma once
-#ifndef RESOURCE_H_
-#define RESOURCE_H_
-
-#include "../Errors.h"
-#include "Synchronized.h"
+#include "../Errors.hpp"
+#include "Synchronized.hpp"
#ifdef __vxworks
#include
#else
@@ -45,4 +43,3 @@ private:
DISALLOW_COPY_AND_ASSIGN(Resource);
};
-#endif
diff --git a/hal/include/HAL/cpp/StackTrace.h b/hal/include/HAL/cpp/StackTrace.h
deleted file mode 100644
index 6112d9c2e5..0000000000
--- a/hal/include/HAL/cpp/StackTrace.h
+++ /dev/null
@@ -1,15 +0,0 @@
-
-#ifdef __vxworks
-#include
-#else
-#include
-#endif
-
-#ifndef HAL_STACKTRACE_H
-#define HAL_STACKTRACE_H
-
-extern "C" {
- void printCurrentStackTrace();
- bool getErrnoToName(int32_t errNo, char* name);
-}
-#endif
diff --git a/hal/include/HAL/cpp/StackTrace.hpp b/hal/include/HAL/cpp/StackTrace.hpp
new file mode 100644
index 0000000000..9e5939b88b
--- /dev/null
+++ b/hal/include/HAL/cpp/StackTrace.hpp
@@ -0,0 +1,13 @@
+#pragma once
+
+#ifdef __vxworks
+#include
+#else
+#include
+#endif
+
+extern "C"
+{
+ void printCurrentStackTrace();
+ bool getErrnoToName(int32_t errNo, char* name);
+}
diff --git a/hal/include/HAL/cpp/Synchronized.h b/hal/include/HAL/cpp/Synchronized.hpp
similarity index 91%
rename from hal/include/HAL/cpp/Synchronized.h
rename to hal/include/HAL/cpp/Synchronized.hpp
index d889e73d08..da631d2522 100644
--- a/hal/include/HAL/cpp/Synchronized.h
+++ b/hal/include/HAL/cpp/Synchronized.hpp
@@ -3,11 +3,9 @@
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
/*----------------------------------------------------------------------------*/
+#pragma once
-#ifndef SYNCHRONIZED_H
-#define SYNCHRONIZED_H
-
-#include "HAL/HAL.h"
+#include "HAL/HAL.hpp"
// A macro to disallow the copy constructor and operator= functions
// This should be used in the private: declarations for a class
@@ -17,6 +15,8 @@
#define CRITICAL_REGION(s) { Synchronized _sync(s);
#define END_REGION }
+// TODO: is this Better?
+#define SYNCHRONIZE(s) for (Synchronized _sync(s), int _i=0;i < 1; i++)
class Synchronized;
@@ -35,10 +35,12 @@ class Synchronized;
class ReentrantSemaphore
{
public:
- explicit ReentrantSemaphore() {
+ explicit ReentrantSemaphore()
+ {
m_semaphore = initializeMutexRecursive();
}
- ~ReentrantSemaphore() {
+ ~ReentrantSemaphore()
+ {
deleteMutex(m_semaphore);
}
@@ -46,7 +48,8 @@ public:
* Lock the semaphore, blocking until it's available.
* @return 0 for success, -1 for error. If -1, the error will be in errno.
*/
- int take() {
+ int take()
+ {
return takeMutex(m_semaphore);
}
@@ -54,15 +57,15 @@ public:
* Unlock the semaphore.
* @return 0 for success, -1 for error. If -1, the error will be in errno.
*/
- int give() {
+ int give()
+ {
return giveMutex(m_semaphore);
}
private:
MUTEX_ID m_semaphore;
- friend class Synchronized;
- DISALLOW_COPY_AND_ASSIGN(ReentrantSemaphore);
+ friend class Synchronized;DISALLOW_COPY_AND_ASSIGN(ReentrantSemaphore);
};
/**
@@ -99,4 +102,3 @@ private:
DISALLOW_COPY_AND_ASSIGN(Synchronized);
};
-#endif
diff --git a/hal/include/Log.h b/hal/include/Log.hpp
similarity index 97%
rename from hal/include/Log.h
rename to hal/include/Log.hpp
index f9253c34be..eb221e79c4 100644
--- a/hal/include/Log.h
+++ b/hal/include/Log.hpp
@@ -1,5 +1,4 @@
-#ifndef __LOG_H__
-#define __LOG_H__
+#pragma once
#include
#include
@@ -102,5 +101,3 @@ inline std::string NowTime()
sprintf(result, "%s.%03ld", buffer, (long)tv.tv_usec / 1000);
return result;
}
-
-#endif //__LOG_H__
diff --git a/hal/lib/Athena/Analog.cpp b/hal/lib/Athena/Analog.cpp
index f2630c8c7a..2b7a22a8de 100644
--- a/hal/lib/Athena/Analog.cpp
+++ b/hal/lib/Athena/Analog.cpp
@@ -1,12 +1,12 @@
-#include "HAL/Analog.h"
+#include "HAL/Analog.hpp"
#include "Port.h"
-#include "HAL/Errors.h"
-#include "HAL/Semaphore.h"
+#include "HAL/Errors.hpp"
+#include "HAL/Semaphore.hpp"
#include "ChipObject.h"
-#include "HAL/cpp/Synchronized.h"
-#include "HAL/cpp/Resource.h"
+#include "HAL/cpp/Synchronized.hpp"
+#include "HAL/cpp/Resource.hpp"
#include "NetworkCommunication/AICalibration.h"
#include "NetworkCommunication/LoadOut.h"
@@ -19,11 +19,10 @@ static const uint32_t kAnalogPins = 8;
static const uint32_t kAccumulatorNumChannels = 2;
static const uint32_t kAccumulatorChannels[] = {1, 2};
-struct analog_port_t {
+struct AnalogPort {
Port port;
tAccumulator *accumulator;
};
-typedef struct analog_port_t AnalogPort;
bool analogSampleRateSet = false;
MUTEX_ID analogRegisterWindowSemaphore = NULL;
diff --git a/hal/lib/Athena/ChipObject.h b/hal/lib/Athena/ChipObject.h
index 45fa2ec78b..a1a08fa122 100644
--- a/hal/lib/Athena/ChipObject.h
+++ b/hal/lib/Athena/ChipObject.h
@@ -3,9 +3,7 @@
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
/*----------------------------------------------------------------------------*/
-
-#ifndef __ChipObject_h__
-#define __ChipObject_h__
+#pragma once
#include
#include "ChipObject/RoboRIO_FRC_ChipObject_Aliases.h"
@@ -34,6 +32,6 @@
#include "ChipObject/tSPI.h"
#include "ChipObject/tSysWatchdog.h"
+// FIXME: these should not be here!
using namespace nFPGA;
using namespace nRoboRIO_FPGANamespace;
-#endif
diff --git a/hal/lib/Athena/ChipObject/tSystemInterface.h b/hal/lib/Athena/ChipObject/tSystemInterface.h
index d13e93222b..4a80b0a7f6 100644
--- a/hal/lib/Athena/ChipObject/tSystemInterface.h
+++ b/hal/lib/Athena/ChipObject/tSystemInterface.h
@@ -12,9 +12,9 @@ public:
tSystemInterface(){}
virtual ~tSystemInterface(){}
- virtual const uint16_t getExpectedFPGAVersion()=0;
- virtual const uint32_t getExpectedFPGARevision()=0;
- virtual const uint32_t * const getExpectedFPGASignature()=0;
+ virtual uint16_t getExpectedFPGAVersion()=0;
+ virtual uint32_t getExpectedFPGARevision()=0;
+ virtual uint32_t * getExpectedFPGASignature()=0;
virtual void getHardwareFpgaSignature(uint32_t *guid_ptr, tRioStatusCode *status)=0;
virtual uint32_t getLVHandle(tRioStatusCode *status)=0;
virtual uint32_t getHandle()=0;
diff --git a/hal/lib/Athena/Digital.cpp b/hal/lib/Athena/Digital.cpp
index a6ecdb926a..5b27cd8cf1 100644
--- a/hal/lib/Athena/Digital.cpp
+++ b/hal/lib/Athena/Digital.cpp
@@ -1,11 +1,11 @@
-#include "HAL/Digital.h"
+#include "HAL/Digital.hpp"
#include "Port.h"
-#include "HAL/HAL.h"
+#include "HAL/HAL.hpp"
#include "ChipObject.h"
-#include "HAL/cpp/Synchronized.h"
-#include "HAL/cpp/Resource.h"
+#include "HAL/cpp/Synchronized.hpp"
+#include "HAL/cpp/Resource.hpp"
#include "NetworkCommunication/LoadOut.h"
#include
#include
@@ -41,11 +41,10 @@ static const float kDefaultPwmCenter = 1.5;
static const int32_t kDefaultPwmStepsDown = 1000;
static const int32_t kPwmDisabled = 0;
-struct digital_port_t {
+struct DigitalPort {
Port port;
uint32_t PWMGeneratorID;
};
-typedef struct digital_port_t DigitalPort;
// XXX: Set these back to static once we figure out the memory clobbering issue
MUTEX_ID digitalDIOSemaphore = NULL;
@@ -142,23 +141,17 @@ void* initializeDigitalPort(void* port_pointer, int32_t *status) {
}
bool checkDigitalModule(uint8_t module) {
- if (nLoadOut::getModulePresence(nLoadOut::kModuleType_Digital, module - 1))
- return true;
- return false;
+ return nLoadOut::getModulePresence(nLoadOut::kModuleType_Digital, module - 1);
}
bool checkPWMChannel(void* digital_port_pointer) {
DigitalPort* port = (DigitalPort*) digital_port_pointer;
- if (port->port.pin > 0 && port->port.pin <= kPwmPins)
- return true;
- return false;
+ return (port->port.pin > 0 && port->port.pin <= kPwmPins);
}
bool checkRelayChannel(void* digital_port_pointer) {
DigitalPort* port = (DigitalPort*) digital_port_pointer;
- if (port->port.pin > 0 && port->port.pin <= kRelayPins)
- return true;
- return false;
+ return (port->port.pin > 0 && port->port.pin <= kRelayPins);
}
uint8_t remapDigitalChannel(uint32_t pin, int32_t *status) {
diff --git a/hal/lib/Athena/HAL.cpp b/hal/lib/Athena/HAL.cpp
index 1cc25049c2..3ec4995cdf 100644
--- a/hal/lib/Athena/HAL.cpp
+++ b/hal/lib/Athena/HAL.cpp
@@ -1,51 +1,70 @@
-
-#include "HAL/HAL.h"
+#include "HAL/HAL.hpp"
#include "Port.h"
-#include "HAL/Errors.h"
+#include "HAL/Errors.hpp"
#include "ChipObject.h"
#include "NetworkCommunication/FRCComm.h"
#include "NetworkCommunication/UsageReporting.h"
#include "NetworkCommunication/LoadOut.h"
#include "ChipObject/nInterfaceGlobals.h"
-
+#include
+#include
+#include
+#include // linux for kill
const uint32_t solenoid_kNumDO7_0Elements = 0;
const uint32_t dio_kNumSystems = tDIO::kNumSystems;
const uint32_t interrupt_kNumSystems = tInterrupt::kNumSystems;
const uint32_t kSystemClockTicksPerMicrosecond = 40;
-void* getPort(uint8_t pin) {
- Port* port = new Port();
- port->pin = pin;
- port->module = 1;
- return port;
+void* getPort(uint8_t pin)
+{
+ Port* port = new Port();
+ port->pin = pin;
+ port->module = 1;
+ return port;
}
/**
* @deprecated Uses module numbers
*/
-void* getPortWithModule(uint8_t module, uint8_t pin) {
- Port* port = new Port();
- port->pin = pin;
- port->module = module;
- return port;
+void* getPortWithModule(uint8_t module, uint8_t pin)
+{
+ Port* port = new Port();
+ port->pin = pin;
+ port->module = module;
+ return port;
}
-const char* getHALErrorMessage(int32_t code) {
- if (code == 0) return "";
- else if (code == SAMPLE_RATE_TOO_HIGH) return SAMPLE_RATE_TOO_HIGH_MESSAGE;
- else if (code == VOLTAGE_OUT_OF_RANGE) return VOLTAGE_OUT_OF_RANGE_MESSAGE;
- else if (code == LOOP_TIMING_ERROR) return LOOP_TIMING_ERROR_MESSAGE;
- else if (code == SPI_WRITE_NO_MOSI) return SPI_WRITE_NO_MOSI_MESSAGE;
- else if (code == SPI_READ_NO_MISO) return SPI_READ_NO_MISO_MESSAGE;
- else if (code == SPI_READ_NO_DATA) return SPI_READ_NO_DATA_MESSAGE;
- else if (code == INCOMPATIBLE_STATE) return INCOMPATIBLE_STATE_MESSAGE;
- else if (code == NO_AVAILABLE_RESOURCES) return NO_AVAILABLE_RESOURCES_MESSAGE;
- else if (code == NULL_PARAMETER) return NULL_PARAMETER_MESSAGE;
- else if (code == ANALOG_TRIGGER_LIMIT_ORDER_ERROR) return ANALOG_TRIGGER_LIMIT_ORDER_ERROR_MESSAGE;
- else if (code == ANALOG_TRIGGER_PULSE_OUTPUT_ERROR) return ANALOG_TRIGGER_PULSE_OUTPUT_ERROR_MESSAGE;
- else if (code == PARAMETER_OUT_OF_RANGE) return PARAMETER_OUT_OF_RANGE_MESSAGE;
- else return "";
+const char* getHALErrorMessage(int32_t code)
+{
+ if (code == 0)
+ return "";
+ else if (code == SAMPLE_RATE_TOO_HIGH)
+ return SAMPLE_RATE_TOO_HIGH_MESSAGE;
+ else if (code == VOLTAGE_OUT_OF_RANGE)
+ return VOLTAGE_OUT_OF_RANGE_MESSAGE;
+ else if (code == LOOP_TIMING_ERROR)
+ return LOOP_TIMING_ERROR_MESSAGE;
+ else if (code == SPI_WRITE_NO_MOSI)
+ return SPI_WRITE_NO_MOSI_MESSAGE;
+ else if (code == SPI_READ_NO_MISO)
+ return SPI_READ_NO_MISO_MESSAGE;
+ else if (code == SPI_READ_NO_DATA)
+ return SPI_READ_NO_DATA_MESSAGE;
+ else if (code == INCOMPATIBLE_STATE)
+ return INCOMPATIBLE_STATE_MESSAGE;
+ else if (code == NO_AVAILABLE_RESOURCES)
+ return NO_AVAILABLE_RESOURCES_MESSAGE;
+ else if (code == NULL_PARAMETER)
+ return NULL_PARAMETER_MESSAGE;
+ else if (code == ANALOG_TRIGGER_LIMIT_ORDER_ERROR)
+ return ANALOG_TRIGGER_LIMIT_ORDER_ERROR_MESSAGE;
+ else if (code == ANALOG_TRIGGER_PULSE_OUTPUT_ERROR)
+ return ANALOG_TRIGGER_PULSE_OUTPUT_ERROR_MESSAGE;
+ else if (code == PARAMETER_OUT_OF_RANGE)
+ return PARAMETER_OUT_OF_RANGE_MESSAGE;
+ else
+ return "";
}
/**
@@ -53,11 +72,12 @@ const char* getHALErrorMessage(int32_t code) {
* For now, expect this to be competition year.
* @return FPGA Version number.
*/
-uint16_t getFPGAVersion(int32_t *status) {
- tGlobal *global = tGlobal::create(status);
- uint16_t version = global->readVersion(status);
- delete global;
- return version;
+uint16_t getFPGAVersion(int32_t *status)
+{
+ tGlobal *global = tGlobal::create(status);
+ uint16_t version = global->readVersion(status);
+ delete global;
+ return version;
}
/**
@@ -68,11 +88,12 @@ uint16_t getFPGAVersion(int32_t *status) {
* The 12 least significant bits are the Build Number.
* @return FPGA Revision number.
*/
-uint32_t getFPGARevision(int32_t *status) {
- tGlobal *global = tGlobal::create(status);
- uint32_t revision = global->readRevision(status);
- delete global;
- return revision;
+uint32_t getFPGARevision(int32_t *status)
+{
+ tGlobal *global = tGlobal::create(status);
+ uint32_t revision = global->readRevision(status);
+ delete global;
+ return revision;
}
/**
@@ -80,35 +101,37 @@ uint32_t getFPGARevision(int32_t *status) {
*
* @return The current time in microseconds according to the FPGA (since FPGA reset).
*/
-uint32_t getFPGATime(int32_t *status) {
- tGlobal *global = tGlobal::create(status);
- uint32_t time = global->readLocalTime(status);
- delete global;
- return time;
+uint32_t getFPGATime(int32_t *status)
+{
+ tGlobal *global = tGlobal::create(status);
+ uint32_t time = global->readLocalTime(status);
+ delete global;
+ return time;
}
-
/**
* Set the state of the FPGA status LED on the cRIO.
*/
-void setFPGALED(uint32_t state, int32_t *status) {
- // XXX: Not supported?
- // tGlobal *global = tGlobal::create(status);
- // global->writeFPGA_LED(state, status);
- // delete global;
+void setFPGALED(uint32_t state, int32_t *status)
+{
+ // XXX: Not supported?
+ // tGlobal *global = tGlobal::create(status);
+ // global->writeFPGA_LED(state, status);
+ // delete global;
}
/**
* Get the current state of the FPGA status LED on the cRIO.
* @return The curent state of the FPGA LED.
*/
-int32_t getFPGALED(int32_t *status) {
- // XXX: Not supported?
- // tGlobal *global = tGlobal::create(status);
- // bool ledValue = global->readFPGA_LED(status);
- // delete global;
- // return ledValue;
- return 0; // XXX: Dummy value
+int32_t getFPGALED(int32_t *status)
+{
+ // XXX: Not supported?
+ // tGlobal *global = tGlobal::create(status);
+ // bool ledValue = global->readFPGA_LED(status);
+ // delete global;
+ // return ledValue;
+ return 0; // XXX: Dummy value
}
int HALSetErrorData(const char *errors, int errorsLength, int wait_ms)
@@ -116,7 +139,8 @@ int HALSetErrorData(const char *errors, int errorsLength, int wait_ms)
return setErrorData(errors, errorsLength, wait_ms);
}
-int HALSetUserDsLcdData(const char *userDsLcdData, int userDsLcdDataLength, int wait_ms)
+int HALSetUserDsLcdData(const char *userDsLcdData, int userDsLcdDataLength,
+ int wait_ms)
{
return setUserDsLcdData(userDsLcdData, userDsLcdDataLength, wait_ms);
}
@@ -126,14 +150,15 @@ int HALOverrideIOConfig(const char *ioConfig, int wait_ms)
return overrideIOConfig(ioConfig, wait_ms);
}
-int HALGetDynamicControlData(uint8_t type, char *dynamicData, int32_t maxLength, int wait_ms)
+int HALGetDynamicControlData(uint8_t type, char *dynamicData, int32_t maxLength,
+ int wait_ms)
{
- return getDynamicControlData( type, dynamicData, maxLength, wait_ms);
+ return getDynamicControlData(type, dynamicData, maxLength, wait_ms);
}
int HALGetCommonControlData(HALCommonControlData *data, int wait_ms)
{
- return getCommonControlData( (FRCCommonControlData*)data, wait_ms );
+ return getCommonControlData((FRCCommonControlData*) data, wait_ms);
}
void HALSetNewDataSem(pthread_mutex_t * param)
@@ -142,16 +167,68 @@ void HALSetNewDataSem(pthread_mutex_t * param)
}
int HALSetStatusData(float battery, uint8_t dsDigitalOut, uint8_t updateNumber,
- const char *userDataHigh, int userDataHighLength,
- const char *userDataLow, int userDataLowLength, int wait_ms)
+ const char *userDataHigh, int userDataHighLength,
+ const char *userDataLow, int userDataLowLength, int wait_ms)
{
- return setStatusData(battery, dsDigitalOut, updateNumber, userDataHigh, userDataHighLength, userDataLow, userDataLowLength, wait_ms);
+ return setStatusData(battery, dsDigitalOut, updateNumber, userDataHigh,
+ userDataHighLength, userDataLow, userDataLowLength, wait_ms);
}
-
-void HALNetworkCommunicationReserve()
+/**
+ * Call this to start up HAL. This is required for robot programs.
+ */
+int HALInitialize(int mode)
{
- nFPGA::nRoboRIO_FPGANamespace::g_currentTargetClass = nLoadOut::kTargetClass_RoboRIO;
+ // image 4; Fixes errors caused by multiple processes. Talk to NI about this
+ nFPGA::nRoboRIO_FPGANamespace::g_currentTargetClass =
+ nLoadOut::kTargetClass_RoboRIO;
+
+ // Kill any previous robot programs
+ std::fstream fs;
+ fs.open("/var/lock/frc.pid", std::fstream::in | std::fstream::out); // By making this both in/out, it won't give us an error if it doesnt exist
+ if (fs.bad())
+ return 0;
+
+ pid_t pid = 0;
+ if (!fs.eof() && !fs.fail())
+ {
+ fs >> pid;
+ //see if the pid is around, but we don't want to mess with init id=1, or ourselves
+ if (pid >= 2 && kill(pid, 0) == 0 && pid != getpid())
+ {
+ std::cout << "Killing previously running FRC program..."
+ << std::endl;
+ kill(pid, SIGTERM); // try to kill it
+ delayMillis(100);
+ if (kill(pid, 0) == 0)
+ {
+ // still not successfull
+ if (mode == 0)
+ {
+ std::cout << "FRC pid " << pid
+ << " did not die within 110ms. Aborting"
+ << std::endl;
+ return 0; // just fail
+ }
+ else if (mode == 1) // kill -9 it
+ kill(pid, SIGKILL);
+ else
+ {
+ std::cout << "WARNING: FRC pid " << pid
+ << " did not die within 110ms." << std::endl;
+ }
+ }
+
+ }
+ }
+ fs.close();
+ // we will re-open it write only to truncate the file
+ fs.open("/var/lock/frc.pid", std::fstream::out | std::fstream::trunc);
+ fs.seekp(0);
+ pid = getpid();
+ fs << pid << std::endl;
+ fs.close();
+ return 1;
}
void HALNetworkCommunicationObserveUserProgramStarting(void)
@@ -179,26 +256,42 @@ void HALNetworkCommunicationObserveUserProgramTest(void)
FRC_NetworkCommunication_observeUserProgramTest();
}
-uint32_t HALReport(uint8_t resource, uint8_t instanceNumber, uint8_t context, const char *feature)
+uint32_t HALReport(uint8_t resource, uint8_t instanceNumber, uint8_t context,
+ const char *feature)
{
//return FRC_NetworkCommunication_nUsageReporting_report( resource, instanceNumber, context, feature);
- return 0;
+ return 0;
}
-
// TODO: HACKS
-void NumericArrayResize() {}
-void RTSetCleanupProc() {}
-void EDVR_CreateReference() {}
-void Occur() {}
+void NumericArrayResize()
+{
+}
+void RTSetCleanupProc()
+{
+}
+void EDVR_CreateReference()
+{
+}
+void Occur()
+{
+}
-void imaqGetErrorText() {}
-void imaqGetLastError() {}
-void niTimestamp64() {}
+void imaqGetErrorText()
+{
+}
+void imaqGetLastError()
+{
+}
+void niTimestamp64()
+{
+}
#include "NetworkCommunication/LoadOut.h"
-namespace nLoadOut {
- bool getModulePresence(tModuleType moduleType, uint8_t moduleNumber) {
- return true;
- }
+namespace nLoadOut
+{
+bool getModulePresence(tModuleType moduleType, uint8_t moduleNumber)
+{
+ return true;
+}
}
diff --git a/hal/lib/Athena/Interrupts.cpp b/hal/lib/Athena/Interrupts.cpp
index c47f5769f4..941118d4d6 100644
--- a/hal/lib/Athena/Interrupts.cpp
+++ b/hal/lib/Athena/Interrupts.cpp
@@ -1,38 +1,39 @@
-
-#include "HAL/Interrupts.h"
-
+#include "HAL/Interrupts.hpp"
#include "ChipObject.h"
-struct interrupt_t {
- tInterrupt *anInterrupt;
- tInterruptManager *manager;
+struct Interrupt // FIXME: why is this internal?
+{
+ tInterrupt *anInterrupt;
+ tInterruptManager *manager;
};
-typedef struct interrupt_t Interrupt;
-void* initializeInterrupts(uint32_t interruptIndex, bool watcher, int32_t *status) {
- Interrupt* anInterrupt = new Interrupt();
- // Expects the calling leaf class to allocate an interrupt index.
- anInterrupt->anInterrupt = tInterrupt::create(interruptIndex, status);
- anInterrupt->anInterrupt->writeConfig_WaitForAck(false, status);
- anInterrupt->manager = new tInterruptManager(1 << interruptIndex, watcher, status);
- return anInterrupt;
+void* initializeInterrupts(uint32_t interruptIndex, bool watcher, int32_t *status)
+{
+ Interrupt* anInterrupt = new Interrupt();
+ // Expects the calling leaf class to allocate an interrupt index.
+ anInterrupt->anInterrupt = tInterrupt::create(interruptIndex, status);
+ anInterrupt->anInterrupt->writeConfig_WaitForAck(false, status);
+ anInterrupt->manager = new tInterruptManager(1 << interruptIndex, watcher, status);
+ return anInterrupt;
}
-void cleanInterrupts(void* interrupt_pointer, int32_t *status) {
- Interrupt* anInterrupt = (Interrupt*) interrupt_pointer;
- delete anInterrupt->anInterrupt;
- delete anInterrupt->manager;
- anInterrupt->anInterrupt = NULL;
- anInterrupt->manager = NULL;
+void cleanInterrupts(void* interrupt_pointer, int32_t *status)
+{
+ Interrupt* anInterrupt = (Interrupt*)interrupt_pointer;
+ delete anInterrupt->anInterrupt;
+ delete anInterrupt->manager;
+ anInterrupt->anInterrupt = NULL;
+ anInterrupt->manager = NULL;
}
/**
* In synchronous mode, wait for the defined interrupt to occur.
* @param timeout Timeout in seconds
*/
-void waitForInterrupt(void* interrupt_pointer, double timeout, int32_t *status) {
- Interrupt* anInterrupt = (Interrupt*) interrupt_pointer;
- anInterrupt->manager->watch((int32_t)(timeout * 1e3), status);
+void waitForInterrupt(void* interrupt_pointer, double timeout, int32_t *status)
+{
+ Interrupt* anInterrupt = (Interrupt*)interrupt_pointer;
+ anInterrupt->manager->watch((int32_t)(timeout * 1e3), status);
}
/**
@@ -40,17 +41,19 @@ void waitForInterrupt(void* interrupt_pointer, double timeout, int32_t *status)
* oInterrupts are disabled when the RequestInterrupt call is made. This gives time to do the
* setup of the other options before starting to field interrupts.
*/
-void enableInterrupts(void* interrupt_pointer, int32_t *status) {
- Interrupt* anInterrupt = (Interrupt*) interrupt_pointer;
- anInterrupt->manager->enable(status);
+void enableInterrupts(void* interrupt_pointer, int32_t *status)
+{
+ Interrupt* anInterrupt = (Interrupt*)interrupt_pointer;
+ anInterrupt->manager->enable(status);
}
/**
* Disable Interrupts without without deallocating structures.
*/
-void disableInterrupts(void* interrupt_pointer, int32_t *status) {
- Interrupt* anInterrupt = (Interrupt*) interrupt_pointer;
- anInterrupt->manager->disable(status);
+void disableInterrupts(void* interrupt_pointer, int32_t *status)
+{
+ Interrupt* anInterrupt = (Interrupt*)interrupt_pointer;
+ anInterrupt->manager->disable(status);
}
/**
@@ -58,29 +61,34 @@ void disableInterrupts(void* interrupt_pointer, int32_t *status) {
* This is in the same time domain as GetClock().
* @return Timestamp in seconds since boot.
*/
-double readInterruptTimestamp(void* interrupt_pointer, int32_t *status) {
- Interrupt* anInterrupt = (Interrupt*) interrupt_pointer;
- uint32_t timestamp = anInterrupt->anInterrupt->readTimeStamp(status);
- return timestamp * 1e-6;
+double readInterruptTimestamp(void* interrupt_pointer, int32_t *status)
+{
+ Interrupt* anInterrupt = (Interrupt*)interrupt_pointer;
+ uint32_t timestamp = anInterrupt->anInterrupt->readTimeStamp(status);
+ return timestamp * 1e-6;
}
void requestInterrupts(void* interrupt_pointer, uint8_t routing_module, uint32_t routing_pin,
- bool routing_analog_trigger, int32_t *status) {
- Interrupt* anInterrupt = (Interrupt*) interrupt_pointer;
+ bool routing_analog_trigger, int32_t *status)
+{
+ Interrupt* anInterrupt = (Interrupt*)interrupt_pointer;
anInterrupt->anInterrupt->writeConfig_WaitForAck(false, status);
anInterrupt->anInterrupt->writeConfig_Source_AnalogTrigger(routing_analog_trigger, status);
anInterrupt->anInterrupt->writeConfig_Source_Channel(routing_pin, status);
anInterrupt->anInterrupt->writeConfig_Source_Module(routing_module, status);
}
-void attachInterruptHandler(void* interrupt_pointer, InterruptHandlerFunction handler,
- void* param, int32_t *status) {
- Interrupt* anInterrupt = (Interrupt*) interrupt_pointer;
- anInterrupt->manager->registerHandler(handler, param, status);
+void attachInterruptHandler(void* interrupt_pointer, InterruptHandlerFunction handler, void* param,
+ int32_t *status)
+{
+ Interrupt* anInterrupt = (Interrupt*)interrupt_pointer;
+ anInterrupt->manager->registerHandler(handler, param, status);
}
-
-void setInterruptUpSourceEdge(void* interrupt_pointer, bool risingEdge, bool fallingEdge, int32_t *status) {
- Interrupt* anInterrupt = (Interrupt*) interrupt_pointer;
- anInterrupt->anInterrupt->writeConfig_RisingEdge(risingEdge, status);
- anInterrupt->anInterrupt->writeConfig_FallingEdge(fallingEdge, status);
+
+void setInterruptUpSourceEdge(void* interrupt_pointer, bool risingEdge, bool fallingEdge,
+ int32_t *status)
+{
+ Interrupt* anInterrupt = (Interrupt*)interrupt_pointer;
+ anInterrupt->anInterrupt->writeConfig_RisingEdge(risingEdge, status);
+ anInterrupt->anInterrupt->writeConfig_FallingEdge(fallingEdge, status);
}
diff --git a/hal/lib/Athena/Notifier.cpp b/hal/lib/Athena/Notifier.cpp
index 8d9766b6c3..c532512775 100644
--- a/hal/lib/Athena/Notifier.cpp
+++ b/hal/lib/Athena/Notifier.cpp
@@ -1,40 +1,40 @@
-
-#include "HAL/Notifier.h"
-
+#include "HAL/Notifier.hpp"
#include "ChipObject.h"
static const uint32_t kTimerInterruptNumber = 28;
-struct notifier_t {
- tAlarm *alarm;
- tInterruptManager *manager;
+struct Notifier
+{
+ tAlarm *alarm;
+ tInterruptManager *manager;
};
-typedef struct notifier_t Notifier;
-void* initializeNotifier(void (*ProcessQueue)(uint32_t, void*), int32_t *status) {
- Notifier* notifier = new Notifier();
- notifier->manager = new tInterruptManager(1 << kTimerInterruptNumber, false, status);
- notifier->manager->registerHandler(ProcessQueue, NULL, status);
- notifier->manager->enable(status);
- notifier->alarm = tAlarm::create(status);
- return notifier;
+void* initializeNotifier(void (*ProcessQueue)(uint32_t, void*), int32_t *status)
+{
+ Notifier* notifier = new Notifier();
+ notifier->manager = new tInterruptManager(1 << kTimerInterruptNumber, false, status);
+ notifier->manager->registerHandler(ProcessQueue, NULL, status);
+ notifier->manager->enable(status);
+ notifier->alarm = tAlarm::create(status);
+ return notifier;
}
-void cleanNotifier(void* notifier_pointer, int32_t *status) {
- Notifier* notifier = (Notifier*) notifier_pointer;
- notifier->alarm->writeEnable(false, status);
- delete notifier->alarm;
- notifier->alarm = NULL;
- notifier->manager->disable(status);
- delete notifier->manager;
- notifier->manager = NULL;
+void cleanNotifier(void* notifier_pointer, int32_t *status)
+{
+ Notifier* notifier = (Notifier*)notifier_pointer;
+ notifier->alarm->writeEnable(false, status);
+ delete notifier->alarm;
+ notifier->alarm = NULL;
+ notifier->manager->disable(status);
+ delete notifier->manager;
+ notifier->manager = NULL;
}
-
-void updateNotifierAlarm(void* notifier_pointer, uint32_t triggerTime, int32_t *status) {
- Notifier* notifier = (Notifier*) notifier_pointer;
- // write the first item in the queue into the trigger time
- notifier->alarm->writeTriggerTime(triggerTime, status);
- // Enable the alarm. The hardware disables itself after each alarm.
- notifier->alarm->writeEnable(true, status);
+void updateNotifierAlarm(void* notifier_pointer, uint32_t triggerTime, int32_t *status)
+{
+ Notifier* notifier = (Notifier*)notifier_pointer;
+ // write the first item in the queue into the trigger time
+ notifier->alarm->writeTriggerTime(triggerTime, status);
+ // Enable the alarm. The hardware disables itself after each alarm.
+ notifier->alarm->writeEnable(true, status);
}
diff --git a/hal/lib/Athena/Port.h b/hal/lib/Athena/Port.h
index 433f318e92..8679c26f6b 100644
--- a/hal/lib/Athena/Port.h
+++ b/hal/lib/Athena/Port.h
@@ -1,11 +1,7 @@
+#pragma once
-#ifndef HAL_PORT_H
-#define HAL_PORT_H
-
-struct port_t {
- uint8_t pin;
- uint8_t module;
-};
-typedef struct port_t Port;
-
-#endif
+typedef struct port_t
+{
+ uint8_t pin;
+ uint8_t module;
+} Port;
diff --git a/hal/lib/Athena/Semaphore.cpp b/hal/lib/Athena/Semaphore.cpp
index 5276d6df80..df24bf16f9 100644
--- a/hal/lib/Athena/Semaphore.cpp
+++ b/hal/lib/Athena/Semaphore.cpp
@@ -1,8 +1,8 @@
-#include "HAL/Semaphore.h"
+#include "HAL/Semaphore.hpp"
#include "ChipObject.h"
-#include "Log.h"
+#include "Log.hpp"
// set the logging level
TLogLevel semaphoreLogLevel = logDEBUG;
diff --git a/hal/lib/Athena/Solenoid.cpp b/hal/lib/Athena/Solenoid.cpp
index 758dcf37a4..42eaa72ad5 100644
--- a/hal/lib/Athena/Solenoid.cpp
+++ b/hal/lib/Athena/Solenoid.cpp
@@ -1,10 +1,10 @@
-#include "HAL/Solenoid.h"
+#include "HAL/Solenoid.hpp"
#include "Port.h"
-#include "HAL/Errors.h"
+#include "HAL/Errors.hpp"
#include "ChipObject.h"
-#include "HAL/cpp/Synchronized.h"
+#include "HAL/cpp/Synchronized.hpp"
#include "NetworkCommunication/LoadOut.h"
// XXX No solenoid abstraction :(
diff --git a/hal/lib/Athena/Task.cpp b/hal/lib/Athena/Task.cpp
index 22fc93743e..ebf92b83f4 100644
--- a/hal/lib/Athena/Task.cpp
+++ b/hal/lib/Athena/Task.cpp
@@ -1,7 +1,7 @@
-#include "HAL/Task.h"
+#include "HAL/Task.hpp"
-#include "HAL/HAL.h"
+#include "HAL/HAL.hpp"
#include "ChipObject.h"
#include
@@ -14,13 +14,13 @@ const int32_t HAL_taskLib_ILLEGAL_OPTIONS = -1; // TODO: update to relevant Task
const int32_t HAL_memLib_NOT_ENOUGH_MEMORY = -1; // TODO: update to relevant TaskMemoryError
const int32_t HAL_taskLib_ILLEGAL_PRIORITY = -1; // TODO: update to relevant TaskPriorityError
-typedef struct task_args_t {
+struct TaskArgs {
FUNCPTR fun;
char* name;
pthread_t** task;
uint32_t arg0, arg1, arg2, arg3, arg4,
arg5, arg6, arg7, arg8, arg9;
-} TaskArgs;
+};
void* startRoutine(void* data) {
TaskArgs* args = (TaskArgs*) data;
diff --git a/hal/lib/Athena/Utilities.cpp b/hal/lib/Athena/Utilities.cpp
index 9121948433..b821e32132 100644
--- a/hal/lib/Athena/Utilities.cpp
+++ b/hal/lib/Athena/Utilities.cpp
@@ -1,29 +1,29 @@
-
-#include "HAL/Utilities.h"
-
-#include "HAL/HAL.h"
-#include "ChipObject.h"
+#include "HAL/Utilities.hpp"
+#include
const int32_t HAL_NO_WAIT = 0;
const int32_t HAL_WAIT_FOREVER = -1;
-void delayTicks(int32_t ticks) {
- struct timespec test, remaining;
- test.tv_sec = 0;
- test.tv_nsec = ticks * 3;
- nanosleep(&test, &remaining);
+void delayTicks(int32_t ticks)
+{
+ struct timespec test, remaining;
+ test.tv_sec = 0;
+ test.tv_nsec = ticks * 3;
+ nanosleep(&test, &remaining);
}
-void delayMillis(double ms) {
- struct timespec test, remaining;
- test.tv_sec = ms/1000;
- test.tv_nsec = 1000*(((uint64_t) ms)%1000000);
- nanosleep(&test, &remaining);
+void delayMillis(double ms)
+{
+ struct timespec test, remaining;
+ test.tv_sec = ms / 1000;
+ test.tv_nsec = 1000 * (((uint64_t)ms) % 1000000);
+ nanosleep(&test, &remaining);
}
-void delaySeconds(double s) {
- struct timespec test, remaining;
- test.tv_sec = (int) s;
- test.tv_nsec = (s - (int)s) * 1000000000.0;
- nanosleep(&test, &remaining);
+void delaySeconds(double s)
+{
+ struct timespec test, remaining;
+ test.tv_sec = (int)s;
+ test.tv_nsec = (s - (int)s) * 1000000000.0;
+ nanosleep(&test, &remaining);
}
diff --git a/hal/lib/Athena/cpp/Resource.cpp b/hal/lib/Athena/cpp/Resource.cpp
index a2baa41e16..f24f3b1c83 100644
--- a/hal/lib/Athena/cpp/Resource.cpp
+++ b/hal/lib/Athena/cpp/Resource.cpp
@@ -4,8 +4,8 @@
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
/*----------------------------------------------------------------------------*/
-#include "HAL/cpp/Resource.h"
-#include "HAL/Errors.h"
+#include "HAL/cpp/Resource.hpp"
+#include "HAL/Errors.hpp"
#include
ReentrantSemaphore Resource::m_createLock;
diff --git a/hal/lib/Athena/cpp/StackTrace.cpp b/hal/lib/Athena/cpp/StackTrace.cpp
index 7629925728..72c0733111 100644
--- a/hal/lib/Athena/cpp/StackTrace.cpp
+++ b/hal/lib/Athena/cpp/StackTrace.cpp
@@ -1,7 +1,7 @@
-#include "HAL/cpp/StackTrace.h"
+#include "HAL/cpp/StackTrace.hpp"
-#include "HAL/HAL.h"
+#include "HAL/HAL.hpp"
#include "../ChipObject.h"
#include
diff --git a/hal/lib/Athena/cpp/Synchronized.cpp b/hal/lib/Athena/cpp/Synchronized.cpp
index e4766130c4..e528208f80 100644
--- a/hal/lib/Athena/cpp/Synchronized.cpp
+++ b/hal/lib/Athena/cpp/Synchronized.cpp
@@ -4,8 +4,8 @@
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
/*----------------------------------------------------------------------------*/
-#include "HAL/cpp/Synchronized.h"
-#include "HAL/Semaphore.h"
+#include "HAL/cpp/Synchronized.hpp"
+#include "HAL/Semaphore.hpp"
/**
* Synchronized class deals with critical regions.
diff --git a/hal/lib/Athena/i2clib/i2c-lib.h b/hal/lib/Athena/i2clib/i2c-lib.h
index d379765e13..123fe7a752 100644
--- a/hal/lib/Athena/i2clib/i2c-lib.h
+++ b/hal/lib/Athena/i2clib/i2c-lib.h
@@ -1,10 +1,7 @@
-#ifndef __I2C_LIB_H__
-#define __I2C_LIB_H__
+#pragma once
int i2clib_open(const char *device);
void i2clib_close(int handle);
int i2clib_read(int handle, uint8_t dev_addr, char *recv_buf, int32_t recv_size);
int i2clib_write(int handle, uint8_t dev_addr, const char *send_buf, int32_t send_size);
int i2clib_writeread(int handle, uint8_t dev_addr, const char *send_buf, int32_t send_size, char *recv_buf, int32_t recv_size);
-
-#endif /* __I2C_LIB_H__ */
\ No newline at end of file
diff --git a/networktables/cpp/CMakeLists.txt b/networktables/cpp/CMakeLists.txt
index 86ab01f5eb..0569d876e8 100644
--- a/networktables/cpp/CMakeLists.txt
+++ b/networktables/cpp/CMakeLists.txt
@@ -4,9 +4,9 @@ project(NetworkTables)
file(GLOB_RECURSE SRC_TARGET_FILES lib/Athena/*.cpp)
file(GLOB_RECURSE SRC_SHARE_FILES lib/share/*.cpp)
include_directories(include)
-add_library(NetworkTables SHARED ${SRC_SHARE_FILES} ${SRC_TARGET_FILES})
+add_library(NetworkTables STATIC ${SRC_SHARE_FILES} ${SRC_TARGET_FILES})
target_link_libraries(NetworkTables ${NI_LIBS})
-INSTALL(TARGETS NetworkTables LIBRARY DESTINATION lib COMPONENT lib)
+INSTALL(TARGETS NetworkTables ARCHIVE DESTINATION lib COMPONENT lib)
INSTALL(DIRECTORY include DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT headers)
# lib/ c gcc_s ld-linux
# usr/lib stdc++
diff --git a/networktables/cpp/include/networktables2/client/ClientConnectionState.h b/networktables/cpp/include/networktables2/client/ClientConnectionState.h
index fdb8e3e313..26cc23c2a3 100644
--- a/networktables/cpp/include/networktables2/client/ClientConnectionState.h
+++ b/networktables/cpp/include/networktables2/client/ClientConnectionState.h
@@ -83,6 +83,7 @@ private:
std::exception& e;
char msg[100];
public:
+ virtual ~ClientConnectionState_Error(){}
/**
* Create a new error state
* @param e
diff --git a/ni-libraries/genlinks b/ni-libraries/genlinks
new file mode 100755
index 0000000000..6931dbcfb7
--- /dev/null
+++ b/ni-libraries/genlinks
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# this file should generate symlinks (POSIX, TODO) or LD scripts (POSIX or windows) to enable standard version linking
+
+for lib in lib*.so.*; do
+ libout="${lib%.*}"
+ rm -rf $libout
+ echo "OUTPUT_FORMAT(elf32-littlearm)" > $libout
+ echo "GROUP ( $lib )" >> $libout
+ echo "Generated LD link $libout -> $lib"
+done
diff --git a/ni-libraries/libFRC_FPGA_ChipObject.so b/ni-libraries/libFRC_FPGA_ChipObject.so
new file mode 100644
index 0000000000..694ddf31da
--- /dev/null
+++ b/ni-libraries/libFRC_FPGA_ChipObject.so
@@ -0,0 +1,2 @@
+OUTPUT_FORMAT(elf32-littlearm)
+GROUP ( libFRC_FPGA_ChipObject.so.1 )
diff --git a/ni-libraries/libFRC_NetworkCommunication.so b/ni-libraries/libFRC_NetworkCommunication.so
new file mode 100644
index 0000000000..a24218eec1
--- /dev/null
+++ b/ni-libraries/libFRC_NetworkCommunication.so
@@ -0,0 +1,2 @@
+OUTPUT_FORMAT(elf32-littlearm)
+GROUP ( libFRC_NetworkCommunication.so.1 )
diff --git a/ni-libraries/libNiFpga.so b/ni-libraries/libNiFpga.so
new file mode 100644
index 0000000000..9f26024c3f
--- /dev/null
+++ b/ni-libraries/libNiFpga.so
@@ -0,0 +1,2 @@
+OUTPUT_FORMAT(elf32-littlearm)
+GROUP ( libNiFpga.so.13 )
diff --git a/ni-libraries/libNiFpga.so.13 b/ni-libraries/libNiFpga.so.13
old mode 100644
new mode 100755
diff --git a/ni-libraries/libNiFpgaLv.so b/ni-libraries/libNiFpgaLv.so
new file mode 100644
index 0000000000..5b915e57a8
--- /dev/null
+++ b/ni-libraries/libNiFpgaLv.so
@@ -0,0 +1,2 @@
+OUTPUT_FORMAT(elf32-littlearm)
+GROUP ( libNiFpgaLv.so.13 )
diff --git a/ni-libraries/libNiFpgaLv.so.13 b/ni-libraries/libNiFpgaLv.so.13
old mode 100644
new mode 100755
diff --git a/ni-libraries/libNiRioSrv.so b/ni-libraries/libNiRioSrv.so
new file mode 100644
index 0000000000..99d3772eb5
--- /dev/null
+++ b/ni-libraries/libNiRioSrv.so
@@ -0,0 +1,2 @@
+OUTPUT_FORMAT(elf32-littlearm)
+GROUP ( libNiRioSrv.so.13 )
diff --git a/ni-libraries/libNiRioSrv.so.13 b/ni-libraries/libNiRioSrv.so.13
old mode 100644
new mode 100755
diff --git a/ni-libraries/libRoboRIO_FRC_ChipObject.so b/ni-libraries/libRoboRIO_FRC_ChipObject.so
new file mode 100644
index 0000000000..b44dc03baf
--- /dev/null
+++ b/ni-libraries/libRoboRIO_FRC_ChipObject.so
@@ -0,0 +1,2 @@
+OUTPUT_FORMAT(elf32-littlearm)
+GROUP ( libRoboRIO_FRC_ChipObject.so.1 )
diff --git a/ni-libraries/libi2c.so b/ni-libraries/libi2c.so
new file mode 100644
index 0000000000..673ca375fe
--- /dev/null
+++ b/ni-libraries/libi2c.so
@@ -0,0 +1,2 @@
+OUTPUT_FORMAT(elf32-littlearm)
+GROUP ( libi2c.so.1 )
diff --git a/ni-libraries/libni_emb.so b/ni-libraries/libni_emb.so
new file mode 100644
index 0000000000..9c868d372e
--- /dev/null
+++ b/ni-libraries/libni_emb.so
@@ -0,0 +1,2 @@
+OUTPUT_FORMAT(elf32-littlearm)
+GROUP ( libni_emb.so.6 )
diff --git a/ni-libraries/libni_emb.so.6 b/ni-libraries/libni_emb.so.6
old mode 100644
new mode 100755
diff --git a/ni-libraries/libni_rtlog.so b/ni-libraries/libni_rtlog.so
new file mode 100644
index 0000000000..30456810f7
--- /dev/null
+++ b/ni-libraries/libni_rtlog.so
@@ -0,0 +1,2 @@
+OUTPUT_FORMAT(elf32-littlearm)
+GROUP ( libni_rtlog.so.2 )
diff --git a/ni-libraries/libni_rtlog.so.2 b/ni-libraries/libni_rtlog.so.2
old mode 100644
new mode 100755
diff --git a/ni-libraries/libnirio_emb_can.so b/ni-libraries/libnirio_emb_can.so
new file mode 100644
index 0000000000..eeb81339f5
--- /dev/null
+++ b/ni-libraries/libnirio_emb_can.so
@@ -0,0 +1,2 @@
+OUTPUT_FORMAT(elf32-littlearm)
+GROUP ( libnirio_emb_can.so.14 )
diff --git a/ni-libraries/libnirio_emb_can.so.14 b/ni-libraries/libnirio_emb_can.so.14
old mode 100644
new mode 100755
diff --git a/ni-libraries/libspi.so b/ni-libraries/libspi.so
new file mode 100644
index 0000000000..e77606f676
--- /dev/null
+++ b/ni-libraries/libspi.so
@@ -0,0 +1,2 @@
+OUTPUT_FORMAT(elf32-littlearm)
+GROUP ( libspi.so.1 )
diff --git a/ni-libraries/libvisa.so b/ni-libraries/libvisa.so
old mode 100644
new mode 100755
diff --git a/wpilibc/CMakeLists.txt b/wpilibc/CMakeLists.txt
index 6e9edcdef2..783da782b2 100644
--- a/wpilibc/CMakeLists.txt
+++ b/wpilibc/CMakeLists.txt
@@ -3,9 +3,9 @@ project(WPILib)
file(GLOB_RECURSE SRC_FILES lib/*.cpp)
include_directories(include/ ${HAL_API_INCLUDES} ${NWT_API_INCLUDES})
-add_library(WPILibAthena SHARED ${SRC_FILES})
+add_library(WPILibAthena STATIC ${SRC_FILES})
target_link_libraries(WPILibAthena HALAthena NetworkTables ${NI_LIBS})
-INSTALL(TARGETS WPILibAthena LIBRARY DESTINATION lib COMPONENT lib)
+INSTALL(TARGETS WPILibAthena ARCHIVE DESTINATION lib COMPONENT lib)
INSTALL(DIRECTORY include DESTINATION ${CMAKE_INSTALL_PREFIX} COMPONENT headers)
# lib/ c m gcc_s ld-linux
# usr/lib stdc++
diff --git a/wpilibc/include/ADXL345_I2C.h b/wpilibc/include/ADXL345_I2C.h
index 8110ee28fa..b9f588436b 100644
--- a/wpilibc/include/ADXL345_I2C.h
+++ b/wpilibc/include/ADXL345_I2C.h
@@ -3,9 +3,7 @@
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
/*----------------------------------------------------------------------------*/
-
-#ifndef __ADXL345_I2C_h__
-#define __ADXL345_I2C_h__
+#pragma once
#include "SensorBase.h"
@@ -48,6 +46,3 @@ public:
protected:
I2C* m_i2c;
};
-
-#endif
-
diff --git a/wpilibc/include/ADXL345_SPI.h b/wpilibc/include/ADXL345_SPI.h
index 3e8a308f75..f48811432f 100644
--- a/wpilibc/include/ADXL345_SPI.h
+++ b/wpilibc/include/ADXL345_SPI.h
@@ -3,9 +3,7 @@
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
/*----------------------------------------------------------------------------*/
-
-#ifndef __ADXL345_SPI_h__
-#define __ADXL345_SPI_h__
+#pragma once
#include "SensorBase.h"
@@ -62,6 +60,3 @@ protected:
DigitalOutput *m_cs;
SPI* m_spi;
};
-
-#endif
-
diff --git a/wpilibc/include/Accelerometer.h b/wpilibc/include/Accelerometer.h
index 10605a28fa..516bdd03f5 100644
--- a/wpilibc/include/Accelerometer.h
+++ b/wpilibc/include/Accelerometer.h
@@ -3,9 +3,7 @@
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
/*----------------------------------------------------------------------------*/
-
-#ifndef ACCELEROMETER_H_
-#define ACCELEROMETER_H_
+#pragma once
#include "AnalogChannel.h"
#include "SensorBase.h"
@@ -47,5 +45,3 @@ private:
ITable *m_table;
};
-
-#endif
diff --git a/wpilibc/include/AnalogChannel.h b/wpilibc/include/AnalogChannel.h
index 5b4a94c4f0..7d6d9621a3 100644
--- a/wpilibc/include/AnalogChannel.h
+++ b/wpilibc/include/AnalogChannel.h
@@ -3,11 +3,9 @@
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
/*----------------------------------------------------------------------------*/
+#pragma once
-#ifndef ANALOG_CHANNEL_H_
-#define ANALOG_CHANNEL_H_
-
-#include "HAL/HAL.h"
+#include "HAL/HAL.hpp"
#include "SensorBase.h"
#include "PIDSource.h"
#include "LiveWindow/LiveWindowSendable.h"
@@ -65,9 +63,9 @@ public:
int64_t GetAccumulatorValue();
uint32_t GetAccumulatorCount();
void GetAccumulatorOutput(int64_t *value, uint32_t *count);
-
+
double PIDGet();
-
+
void UpdateTable();
void StartLiveWindowMode();
void StopLiveWindowMode();
@@ -80,8 +78,6 @@ private:
uint32_t m_channel, m_module;
void* m_port;
int64_t m_accumulatorOffset;
-
+
ITable *m_table;
};
-
-#endif
diff --git a/wpilibc/include/AnalogModule.h b/wpilibc/include/AnalogModule.h
index 7f9140c475..20d4382538 100644
--- a/wpilibc/include/AnalogModule.h
+++ b/wpilibc/include/AnalogModule.h
@@ -3,11 +3,9 @@
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
/*----------------------------------------------------------------------------*/
+#pragma once
-#ifndef ANALOG_MODULE_H_
-#define ANALOG_MODULE_H_
-
-#include "HAL/HAL.h"
+#include "HAL/HAL.hpp"
#include "Module.h"
/**
@@ -17,9 +15,9 @@
* The accumulator is attached to the output of the oversample and average engine so that the center
* value can be specified in higher resolution resulting in less error.
*/
-class AnalogModule: public Module
-{
- friend class Module;
+class AnalogModule : public Module
+{
+ friend class Module;
public:
static const long kTimebase = 40000000; ///< 40 MHz clock
@@ -52,5 +50,3 @@ private:
uint8_t m_moduleNumber;
void* m_ports[kAnalogChannels];
};
-
-#endif
diff --git a/wpilibc/include/AnalogTrigger.h b/wpilibc/include/AnalogTrigger.h
index 37cf7190e2..31d363fdb0 100644
--- a/wpilibc/include/AnalogTrigger.h
+++ b/wpilibc/include/AnalogTrigger.h
@@ -3,18 +3,16 @@
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
/*----------------------------------------------------------------------------*/
+#pragma once
-#ifndef ANALOG_TRIGGER_H_
-#define ANALOG_TRIGGER_H_
-
-#include "HAL/HAL.h"
+#include "HAL/HAL.hpp"
#include "AnalogTriggerOutput.h"
#include "SensorBase.h"
class AnalogChannel;
class AnalogModule;
-class AnalogTrigger: public SensorBase
+class AnalogTrigger : public SensorBase
{
friend class AnalogTriggerOutput;
public:
@@ -38,6 +36,3 @@ private:
uint8_t m_index;
void* m_trigger;
};
-
-#endif
-
diff --git a/wpilibc/include/AnalogTriggerOutput.h b/wpilibc/include/AnalogTriggerOutput.h
index d0ad527263..b693e3d3aa 100644
--- a/wpilibc/include/AnalogTriggerOutput.h
+++ b/wpilibc/include/AnalogTriggerOutput.h
@@ -3,9 +3,7 @@
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
/*----------------------------------------------------------------------------*/
-
-#ifndef ANALOG_TRIGGER_OUTPUT_H_
-#define ANALOG_TRIGGER_OUTPUT_H_
+#pragma once
#include "DigitalSource.h"
@@ -38,7 +36,7 @@ class AnalogTrigger;
* is not sharp / clean enough. Using the averaging engine may help with this, but rotational speeds of
* the sensor will then be limited.
*/
-class AnalogTriggerOutput: public DigitalSource
+class AnalogTriggerOutput : public DigitalSource
{
friend class AnalogTrigger;
public:
@@ -50,7 +48,7 @@ public:
virtual uint32_t GetChannelForRouting();
virtual uint32_t GetModuleForRouting();
virtual bool GetAnalogTriggerForRouting();
- virtual void RequestInterrupts(InterruptHandlerFunction handler, void *param=NULL); ///< Asynchronus handler version.
+ virtual void RequestInterrupts(InterruptHandlerFunction handler, void *param = NULL); ///< Asynchronus handler version.
virtual void RequestInterrupts(); ///< Synchronus Wait version.
protected:
AnalogTriggerOutput(AnalogTrigger *trigger, AnalogTriggerType outputType);
@@ -59,6 +57,3 @@ private:
AnalogTrigger *m_trigger;
AnalogTriggerType m_outputType;
};
-
-
-#endif
diff --git a/wpilibc/include/Base.h b/wpilibc/include/Base.h
index eb11f96b8e..8e2350473d 100644
--- a/wpilibc/include/Base.h
+++ b/wpilibc/include/Base.h
@@ -3,13 +3,12 @@
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
/*----------------------------------------------------------------------------*/
-
-#ifndef _BASE_H
-#define _BASE_H
+#pragma once
// If don't have C++11, define constexpr as const for WindRiver
#if __cplusplus < 201103L
#define constexpr const
+#define nullptr NULL
#endif
// A macro to disallow the copy constructor and operator= functions
@@ -17,5 +16,3 @@
#define DISALLOW_COPY_AND_ASSIGN(TypeName) \
TypeName(const TypeName&); \
void operator=(const TypeName&)
-
-#endif
diff --git a/wpilibc/include/CANJaguar.h b/wpilibc/include/CANJaguar.h
index 6b61060a06..d1ce734574 100644
--- a/wpilibc/include/CANJaguar.h
+++ b/wpilibc/include/CANJaguar.h
@@ -3,18 +3,15 @@
/* Open Source Software - may be modified and shared by FRC teams. The code */
/* must be accompanied by the FIRST BSD license file in $(WIND_BASE)/WPILib. */
/*----------------------------------------------------------------------------*/
-
-
-#ifndef CANJAGUAR_H
-#define CANJAGUAR_H
+#pragma once
#include "ErrorBase.h"
#include "MotorSafety.h"
#include "MotorSafetyHelper.h"
#include "PIDOutput.h"
#include "SpeedController.h"
-#include "HAL/Semaphore.h"
-#include "HAL/HAL.h"
+#include "HAL/Semaphore.hpp"
+#include "HAL/HAL.hpp"
#include "LiveWindow/LiveWindowSendable.h"
#include "tables/ITable.h"
@@ -135,5 +132,3 @@ protected:
private:
void InitCANJaguar();
};
-#endif
-
diff --git a/wpilibc/include/Commands/Scheduler.h b/wpilibc/include/Commands/Scheduler.h
index c7913cbc73..0fada5fe58 100644
--- a/wpilibc/include/Commands/Scheduler.h
+++ b/wpilibc/include/Commands/Scheduler.h
@@ -14,7 +14,7 @@
#include "networktables2/type/NumberArray.h"
#include "networktables2/type/StringArray.h"
#include "SmartDashboard/SmartDashboard.h"
-#include "HAL/Semaphore.h"
+#include "HAL/Semaphore.hpp"
#include
#include