Compare commits

...

25 Commits

Author SHA1 Message Date
Thad House
e75e9092a8 Fixes athena runtime zip not being built at the correct times (#306) 2016-10-27 22:01:28 -07:00
Thad House
247cef5ec2 Removes CANJaguar from wpilib (#300)
Now located at https://github.com/wpilibsuite/CANJaguar.
2016-10-27 10:54:52 -07:00
Thad House
29f999e2b2 Adds new handle structure and type for vendors (#297) 2016-10-26 23:09:33 -07:00
Thad House
5e3755493d Linking and maven publish location rewrite (#298)
* Links HAL shared instead of static, and doesn't include library in jar

* Strips shared object files, and includes debug in releases

* Zips the HAL libraries into a separate maven artifact

* Switches to shared wpiutil

* Switches wpilibc to shared

* Moves maven artifacts

wpilibc now in edu.wpi.first.wpilibc:athena
wpilibj now in edu.wpi.first.wpilibj:athena
wpilibj jni not in edu.wpi.first.wpilibj:athena-jni
hal now in edu.wpi.first.wpilib:hal
athena runtime added (hal, ntcore, wpiutil) edu.wpi.first.wpilib:athena-runtime

Changes made where wpilibc does NOT include all required artifacts anymore. Dependent on hal, wpiutil and ntcore packages to work correctly.
JNI does NOT include all required artifacts anymore. Dependent on hal and wpiutil packages to work correctly.
2016-10-25 20:46:09 -07:00
Thad House
70343c0b3f Fixes missing function for Timer::GetMatchTime() (#299) 2016-10-25 19:01:18 -07:00
Thad House
60e199b0bd Fixes format.py on windows (#293) 2016-10-24 22:17:02 -07:00
Thad House
1071686d81 Replaces C++ IsNewControlData semaphore with atomic bool, and Java code with AtomicBool (#187) 2016-10-24 20:32:43 -07:00
Tyler Veness
fdebdd520a Added format.py to Travis config (#236) 2016-10-23 21:37:43 -07:00
Tyler Veness
5ca5583fc3 Removed unnecessary set of parentheses and ran formatter (#290) 2016-10-23 16:34:00 -07:00
Thad House
75463a249f Implements threaded notifiers and interrupts in the HAL (#281) 2016-10-23 14:34:43 -07:00
Thad House
7280d241f0 Fixes DIO not erroring with too high of DIO number (#288) 2016-10-23 14:21:14 -07:00
Austin Shalit
963391cf39 Cleanup SolenoidBase, Solenoid, and DoubleSolenoid (#271) 2016-10-23 14:20:28 -07:00
Thad House
4f4c52d6d5 Switches JNI to use SafeThread from WPIUtil (#282) 2016-10-23 14:18:46 -07:00
Fred Silberberg
499da6d08d Updated the wpilib version plugin to 1.2. Fixes issues with submodules. (#289) 2016-10-23 14:17:59 -07:00
Austin Shalit
39e4d11f8e Remove .pullapprove.yml (#287) 2016-10-23 11:20:29 -07:00
Thad House
df4a2c07f0 Checks for system initialization in functions that can be called before creating handle based objects (#285) 2016-10-23 10:00:34 -07:00
Thad House
c46c490376 Adds wpiUtil to HAL and JNI (#280) 2016-10-23 09:51:30 -07:00
Thad House
f2751db5c2 Adds NI Libraries symbolic link (#286) 2016-10-22 14:21:26 -07:00
Thad House
2bff276adb Fixes a missed formatting issue (#283) 2016-10-21 08:30:49 -07:00
Fred Silberberg
e5e1a1a4d1 Moved version generation to the WPILib versioning plugin. (#277)
* Moved version generation to the WPILib versioning plugin. This also moves ntcore and wpilib to the latest available version.

* Fixed description string.

* Gave full path for ignored files.
2016-10-20 23:54:04 -07:00
Austin Shalit
0613f1d182 Cleanup encoder class (#272) 2016-10-19 22:39:47 -07:00
Austin Shalit
8b94e0933a Update README (#261)
Update the README to include instructions on how to image the test bench roboRIO.
2016-10-19 22:37:43 -07:00
Austin Shalit
23ef57561d Cleanup PowerDistributionPanel (#275) 2016-10-19 22:34:57 -07:00
Austin Shalit
33b95816ee Cleanup SensorBase class (#273) 2016-10-19 22:33:36 -07:00
Thad House
4c1e4fd80c Updates image to v6 (#278)
Added exports of the environment variables set in the frcRunRobot script to prevent fork calls.
2016-10-19 22:30:29 -07:00
250 changed files with 2130 additions and 10800 deletions

2
.gitignore vendored
View File

@@ -8,6 +8,8 @@ dependency-reduced-pom.xml
/wpilibj/src/athena/cpp/nivision/*.java
/wpilibj/src/athena/cpp/nivision/nivision_funcs.txt
/wpilibj/src/athena/cpp/nivision/imaqdx_funcs.txt
/wpilibj/src/shared/java/edu/wpi/first/wpilibj/util/WPILibVersion.java
/wpilibc/shared/src/WPILibVersion.cpp
doxygen.log
# Created by the jenkins test script

View File

@@ -1,12 +0,0 @@
approve_by_comment: true
approve_regex: ^(Approved|LGTM)
reject_regex: ^Rejected
reset_on_push: true
reset_on_reopened: true
reviewers:
-
name: "Master Merge Approvers"
required: 1
teams:
- master-merge-approvers

View File

@@ -7,7 +7,7 @@ before_install:
- wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
- sudo add-apt-repository ppa:wpilib/toolchain -y
- sudo apt-get update -q || true
- sudo apt-get install frc-toolchain libgazebo7-dev protobuf-compiler libprotobuf-dev -y
- sudo apt-get install frc-toolchain libgazebo7-dev protobuf-compiler libprotobuf-dev python3 clang-format-3.8 -y
before_cache:
@@ -17,5 +17,10 @@ cache:
- $HOME/.gradle/caches/
- $HOME/.gradle/wrapper/
before_script:
- git clone git://github.com/wpilibsuite/styleguide $HOME/styleguide
script:
- WPI_FORMAT=$HOME/styleguide python3 styleguide/format.py
- git --no-pager diff --exit-code HEAD # Ensure formatter made no changes
- ./gradlew build -PmakeSim

View File

@@ -37,7 +37,7 @@ So you want to contribute your changes back to WPILib. Great! We have a few cont
## Coding Guidelines
WPILib uses modified Google style guides for both C++ and Java, which can be found in the [styleguide repository](https://github.com/wpilibsuite/styleguide). Autoformatters are available for many popular editors at https://github.com/google/styleguide. Another option for C++ is running format.py in the style guide directory.
WPILib uses modified Google style guides for both C++ and Java, which can be found in the [styleguide repository](https://github.com/wpilibsuite/styleguide). Autoformatters are available for many popular editors at https://github.com/google/styleguide. Running format.py, which is in the styleguide directory, is required for all contributions and is enforced by our continuous integration system.
While the library should be fully formatted according to the styles, additional elements of the style guide were not followed when the library was initially created. All new code should follow the guidelines. If you are looking for some easy ramp-up tasks, finding areas that don't follow the style guide and fixing them is very welcome.

View File

@@ -22,13 +22,19 @@ The WPILib Mission is to enable FIRST Robotics teams to focus on writing game-sp
Using Gradle makes building WPILib very straightforward. It only has a few dependencies on outside tools, such as the ARM cross compiler for creating roboRIO binaries.
## Requirements
- [ARM Compiler Toolchain](http://first.wpi.edu/FRC/roborio/toolchains/)
- Doxygen (Only required if you want to build the C++ documentation)
- [format.py](https://github.com/wpilibsuite/styleguide)
## Setup
Clone the WPILib Repo. If the toolchains are not installed, install them, and make sure they are available on the system PATH.
Clone the WPILib repository. If the toolchains are not installed, install them, and make sure they are available on the system PATH.
See the [styleguide README](https://github.com/wpilibsuite/styleguide/blob/master/README.md) for format.py setup instructions.
## Building
All build steps are executed using the Gradle wrapper, `gradlew`. Each target that Gradle can build is referred to as a task. The most common Gradle task to use is `build`. This will build all the outputs created by WPILib. To run, open a console and cd into the cloned WPILib directory. Then:
```bash
@@ -61,7 +67,10 @@ The gradlew wrapper only exists in the root of the main project, so be sure to r
There are a few tasks other than `build` available. To see them, run the meta-task `tasks`. This will print a list of all available tasks, with a description of each task.
format.py can be executed in either the styleguide or root directories of the repository via `python3 format.py` or `./format.py`.
## Publishing
If you are building to test with the Eclipse plugins or just want to export the build as a Maven-style dependency, simply run the `publish` task. This task will publish all available packages to ~/releases/maven/development. If you need to publish the project to a different repo, you can specify it with `-Prepo=repo_name`. Valid options are:
- development - The default repo.
@@ -79,6 +88,7 @@ The following maven targets a published by this task:
- org.gazebosim:JavaGazebo:0.1.0-SNAPSHOT - Gazebo protocol for Java.
## Structure and Organization
The main WPILib code you're probably looking for is in WPILibJ and WPILibC. Those directories are split into shared, sim, and athena. Athena contains the WPILib code meant to run on your roboRIO. Sim is WPILib code meant to run on your computer with Gazebo, and shared is code shared between the two. Shared code must be platform-independent, since it will be compiled with both the ARM cross-compiler and whatever desktop compiler you are using (g++, msvc, etc...).
The Simulation directory contains extra simulation tools and libraries, such as gz_msgs and JavaGazebo. See sub-directories for more information.

View File

@@ -1,13 +1,6 @@
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath 'net.ltgt.gradle:gradle-errorprone-plugin:0.0.8'
}
plugins {
id 'net.ltgt.errorprone' version '0.0.8'
id 'edu.wpi.first.wpilib.versioning.WPILibVersioningPlugin' version '1.2'
}
def enableSimulation = hasProperty('enableSimulation')
@@ -16,9 +9,6 @@ if (!hasProperty('repo')) {
ext.repo = 'development'
}
def repoBaseUrl = "http://first.wpi.edu/FRC/roborio/maven/${repo}"
def publishUrl = "${System.getProperty('user.home')}/releases/maven/${repo}"
ext.simulationInstallDir = "$rootDir/build/install/simulation"
allprojects {
@@ -27,12 +17,6 @@ allprojects {
repositories {
mavenCentral()
maven {
url publishUrl
}
maven {
url repoBaseUrl
}
}
}
@@ -54,10 +38,9 @@ subprojects {
options.addStringOption('Xdoclint:none', '-quiet')
}
}
ext.setupWpilibRepo = { publishing ->
publishing.repositories.maven {
url = "${System.getProperty('user.home')}/releases/maven/${repo}"
url = WPILibVersion.mavenLocalUrl
}
}
}

View File

@@ -1,37 +1,54 @@
// This regex matches either a Windows or Unix style file separator, then the lib part of the library,
// then the name of the library itself, and finally the .so extension at the end. The name of the library
// is in the libName capture group, which is extracted and used for the linker flags
def libPattern = /.*((\\/|\\).*)+lib(?<libName>.+).so$/
def niLibraryArgs = []
// These add the nilibraries shared library to the linker args
def niLibraryPath = file('ni-libraries').path
def niLibrary = niLibraryPath + "/libnilibraries.so"
// The NI Library tree includes all non-wpi libraries, which is everything that doesn't have libwpi in the name
def niLibraryTree = fileTree(niLibraryPath)
niLibraryTree.include '*.so'
niLibraryTree.exclude '*wpi*.so'
task downloadArmNetworkTables() {
description = 'Downloads the C++ ARM NetworkTables maven dependency.'
group = 'WPILib'
def depFolder = "$buildDir/dependencies"
def ntZip = file("$depFolder/ntcore-arm.zip")
outputs.file(ntZip)
def armNetTables
// This adds all linker flags to the list of ni library linker flags
niLibraryTree.each { lib ->
def nameMatcher = (lib.path =~ libPattern)
if (nameMatcher[0].size() > 1) {
def name = nameMatcher.group('libName')
niLibraryArgs << '-l' + name
doFirst {
def armNtDependency = project.dependencies.create('edu.wpi.first.wpilib.networktables.cpp:NetworkTables:+:arm@zip')
def armConfig = project.configurations.detachedConfiguration(armNtDependency)
armConfig.setTransitive(false)
armNetTables = armConfig.files[0].canonicalFile
}
doLast {
copy {
from armNetTables
rename 'NetworkTables(.+)', 'ntcore-arm.zip'
into depFolder
}
}
}
def armNtDependency =
project.dependencies.create("edu.wpi.first.wpilib.networktables.cpp:NetworkTables:3.0.0-SNAPSHOT:arm@zip")
def armConfig = project.configurations.detachedConfiguration(armNtDependency)
armConfig.setTransitive(false)
def armNetTables = armConfig.files[0].canonicalFile
def desktopNetTables
if (project.hasProperty('makeSim')) {
def desktopNtDependency =
project.dependencies.create("edu.wpi.first.wpilib.networktables.cpp:NetworkTables:3.0.0-SNAPSHOT:desktop@zip")
def desktopConfig = project.configurations.detachedConfiguration(desktopNtDependency)
desktopConfig.setTransitive(false)
desktopNetTables = desktopConfig.files[0].canonicalFile
task downloadDesktopNetworkTables() {
description = 'Downloads the C++ Desktop NetworkTables maven dependency.'
group = 'WPILib'
def depFolder = "$buildDir/dependencies"
def ntZip = file("$depFolder/ntcore-desk.zip")
outputs.file(ntZip)
def desktopNetTables
doFirst {
def desktopNtDependency = project.dependencies.create("edu.wpi.first.wpilib.networktables.cpp:NetworkTables:+:desktop@zip")
def desktopConfig = project.configurations.detachedConfiguration(desktopNtDependency)
desktopConfig.setTransitive(false)
desktopNetTables = desktopConfig.files[0].canonicalFile
}
doLast {
copy {
from desktopNetTables
rename 'NetworkTables(.+)', 'ntcore-desk.zip'
into depFolder
}
}
}
}
def netTablesUnzipLocation = "$buildDir/networktables"
@@ -40,26 +57,64 @@ def netTablesUnzipLocation = "$buildDir/networktables"
task unzipNetworkTables(type: Copy) {
description = 'Unzips the networktables maven dependency so that the include files and libraries can be used'
group = 'WPILib'
dependsOn downloadArmNetworkTables
if (project.hasProperty('makeSim')) {
from zipTree(desktopNetTables)
dependsOn downloadDesktopNetworkTables
from zipTree(downloadDesktopNetworkTables.outputs.files.singleFile)
}
from zipTree(armNetTables)
from zipTree(downloadArmNetworkTables.outputs.files.singleFile)
into netTablesUnzipLocation
}
def armWpiUtilDependency =
project.dependencies.create("edu.wpi.first.wpilib:wpiutil:1.0.0-SNAPSHOT:arm@zip")
def armWpiUtilConfig = project.configurations.detachedConfiguration(armWpiUtilDependency)
armWpiUtilConfig.setTransitive(false)
def armWpiUtil = armWpiUtilConfig.files[0].canonicalFile
task downloadArmWpiUtil() {
description = 'Downloads the C++ ARM wpiutil maven dependency.'
group = 'WPILib'
def depFolder = "$buildDir/dependencies"
def utilZip = file("$depFolder/wpiutil-arm.zip")
outputs.file(utilZip)
def armWpiUtil
doFirst {
def armWpiUtilDependency = project.dependencies.create("edu.wpi.first.wpilib:wpiutil:+:arm@zip")
def armWpiUtilConfig = project.configurations.detachedConfiguration(armWpiUtilDependency)
armWpiUtilConfig.setTransitive(false)
armWpiUtil = armWpiUtilConfig.files[0].canonicalFile
}
doLast {
copy {
from armWpiUtil
rename 'wpiutil(.+)', 'wpiutil-arm.zip'
into depFolder
}
}
}
def desktopWpiUtil
if (project.hasProperty('makeSim')) {
def desktopWpiUtilDependency =
project.dependencies.create("edu.wpi.first.wpilib:wpiutil:1.0.0-SNAPSHOT:desktop@zip")
def desktopWpiUtilConfig = project.configurations.detachedConfiguration(desktopWpiUtilDependency)
desktopWpiUtilConfig.setTransitive(false)
desktopWpiUtil = desktopWpiUtilConfig.files[0].canonicalFile
task downloadDesktopWpiUtil() {
description = 'Downloads the C++ Desktop wpiutil maven dependency.'
group = 'WPILib'
def depFolder = "$buildDir/dependencies"
def wpiutilZip = file("$depFolder/wpiutil-desk.zip")
outputs.file(wpiutilZip)
def wpiUtil
doFirst {
def desktopWpiUtilDependency = project.dependencies.create("edu.wpi.first.wpilib:wpiutil:+:desktop@zip")
def desktopWpiUtilConfig = project.configurations.detachedConfiguration(desktopWpiUtilDependency)
desktopWpiUtilConfig.setTransitive(false)
wpiUtil = desktopWpiUtilConfig.files[0].canonicalFile
}
doLast {
copy {
from wpiUtil
rename 'wpiutil(.+)', 'wpiutil-desk.zip'
into depFolder
}
}
}
}
def wpiUtilUnzipLocation = "$buildDir/wpiutil"
@@ -68,10 +123,13 @@ def wpiUtilUnzipLocation = "$buildDir/wpiutil"
task unzipWpiUtil(type: Copy) {
description = 'Unzips the wpiutil maven dependency so that the include files and libraries can be used'
group = 'WPILib'
dependsOn downloadArmWpiUtil
if (project.hasProperty('makeSim')) {
from zipTree(desktopWpiUtil)
dependsOn downloadDesktopWpiUtil
from zipTree(downloadDesktopWpiUtil.outputs.files.singleFile)
}
from zipTree(armWpiUtil)
from zipTree(downloadArmWpiUtil.outputs.files.singleFile)
into wpiUtilUnzipLocation
}
@@ -82,46 +140,68 @@ task clean(type: Delete) {
}
subprojects {
ext.defineWpiUtilProperties = {
ext.wpiUtil = wpiUtilUnzipLocation
ext.wpiUtilInclude = "$wpiUtilUnzipLocation/include"
ext.wpiUtilLibArmLocation = "$wpiUtilUnzipLocation/Linux/arm"
if (project.hasProperty('makeSim')) {
ext.wpiUtilLibDesktopLocation = "$wpiUtilUnzipLocation/Linux/amd64"
}
ext.wpiUtilSharedLib = "$wpiUtilLibArmLocation/libwpiutil.so"
ext.wpiUtilSharedLibDebug = "$wpiUtilLibArmLocation/libwpiutil.so.debug"
ext.wpiUtilStaticLib = "$wpiUtilLibArmLocation/libwpiutil.a"
ext.addWpiUtilLibraryLinks = { compileTask, linker, targetPlatform ->
compileTask.dependsOn project(':').unzipWpiUtil
String architecture = targetPlatform.architecture
if (architecture.contains('arm')) {
linker.args wpiUtilSharedLib
}
}
ext.addStaticWpiUtilLibraryLinks = { compileTask, linker, targetPlatform ->
compileTask.dependsOn project(':').unzipWpiUtil
String architecture = targetPlatform.architecture
if (architecture.contains('arm')) {
linker.args wpiUtilStaticLib
}
}
}
// This defines a project property that projects depending on network tables can use to setup that dependency.
ext.defineNetworkTablesProperties = {
ext.netTables = netTablesUnzipLocation
ext.netTablesInclude = "$netTablesUnzipLocation/include"
ext.netLibArmLocation = "$netTablesUnzipLocation/Linux/arm"
if (project.hasProperty('makeSim')) {
ext.netLibDesktopLocation = "$netTablesUnzipLocation/Linux/amd64"
}
ext.netSharedLib = "$netLibArmLocation/libntcore.so"
ext.netSharedLibDebug = "$netLibArmLocation/libntcore.so.debug"
ext.netStaticLib = "$netLibArmLocation/libntcore.a"
ext.addNetworkTablesLibraryLinks = { compileTask, linker, targetPlatform ->
compileTask.dependsOn project(':').unzipNetworkTables
String architecture = targetPlatform.architecture
if (architecture.contains('arm')) {
linker.args netSharedLib
}
addWpiUtilLibraryLinks(compileTask, linker, targetPlatform)
}
ext.addStaticNetworkTablesLibraryLinks = { compileTask, linker, targetPlatform ->
compileTask.dependsOn project(':').unzipNetworkTables
String architecture = targetPlatform.architecture
if (architecture.contains('arm')) {
linker.args netStaticLib
}
addStaticWpiUtilLibraryLinks(compileTask, linker, targetPlatform)
}
}
plugins.withType(CppPlugin).whenPluginAdded {
ext.defineWpiUtilProperties = {
ext.wpiUtil = wpiUtilUnzipLocation
ext.wpiUtilInclude = "$wpiUtilUnzipLocation/include"
ext.wpiUtilLibArmLocation = "$wpiUtilUnzipLocation/Linux/arm"
if (project.hasProperty('makeSim')) {
ext.wpiUtilLibDesktopLocation = "$wpiUtilUnzipLocation/Linux/amd64"
}
ext.wpiUtilStaticLib = "$wpiUtilLibArmLocation/libwpiutil.a"
ext.addWpiUtilLibraryLinks = { compileTask, linker, targetPlatform ->
compileTask.dependsOn project(':').unzipWpiUtil
String architecture = targetPlatform.architecture
if (architecture.contains('arm')) {
linker.args wpiUtilStaticLib
}
}
}
// This defines a project property that projects depending on network tables can use to setup that dependency.
ext.defineNetworkTablesProperties = {
ext.netTables = netTablesUnzipLocation
ext.netTablesInclude = "$netTablesUnzipLocation/include"
ext.netLibArmLocation = "$netTablesUnzipLocation/Linux/arm"
if (project.hasProperty('makeSim')) {
ext.netLibDesktopLocation = "$netTablesUnzipLocation/Linux/amd64"
}
ext.netSharedLib = "$netLibArmLocation/libntcore.so"
ext.netStaticLib = "$netLibArmLocation/libntcore.a"
ext.addNetworkTablesLibraryLinks = { compileTask, linker, targetPlatform ->
compileTask.dependsOn project(':').unzipNetworkTables
String architecture = targetPlatform.architecture
if (architecture.contains('arm')) {
linker.args netStaticLib
}
addWpiUtilLibraryLinks(compileTask, linker, targetPlatform)
}
}
// We use a custom-built cross compiler with the prefix arm-frc-linux-gnueabi-<util name>
// If this ever changes, the prefix will need to be changed here
def compilerPrefix = 'arm-frc-linux-gnueabi-'
model {
buildTypes {
debug
@@ -130,9 +210,6 @@ subprojects {
toolChains {
gcc(Gcc) {
target('arm') {
// We use a custom-built cross compiler with the prefix arm-frc-linux-gnueabi-<util name>
// If this ever changes, the prefix will need to be changed here
def compilerPrefix = 'arm-frc-linux-gnueabi-'
cppCompiler.executable = compilerPrefix + cppCompiler.executable
linker.executable = compilerPrefix + linker.executable
assembler.executable = compilerPrefix + assembler.executable
@@ -159,9 +236,6 @@ subprojects {
// that trying to compile with Clang will call gcc instead
macGcc(Clang) {
target('arm') {
// We use a custom-built cross compiler with the prefix arm-frc-linux-gnueabi-<util name>
// If this ever changes, the prefix will need to be changed here
def compilerPrefix = 'arm-frc-linux-gnueabi-'
cppCompiler.executable = compilerPrefix + 'g++'
linker.executable = compilerPrefix + 'g++'
assembler.executable = compilerPrefix + 'gcc'
@@ -199,7 +273,25 @@ subprojects {
String architecture = targetPlatform.architecture
if (architecture.contains('arm')){
linker.args << '-L' + niLibraryPath
linker.args.addAll(niLibraryArgs)
linker.args niLibrary
}
}
// This task sets up the shared libraries to be stripped
ext.debugStripSetup = { project->
if (!project.hasProperty('debug')) {
project.tasks.whenObjectAdded { task ->
def name = task.name.toLowerCase()
if (name.contains('link') && name.contains('sharedlibrary')) {
def library = task.outputFile.absolutePath
def debugLibrary = task.outputFile.absolutePath + ".debug"
task.doLast {
exec { commandLine "${compilerPrefix}objcopy", '--only-keep-debug', library, debugLibrary }
exec { commandLine "${compilerPrefix}strip", '-g', library }
exec { commandLine "${compilerPrefix}objcopy", "--add-gnu-debuglink=$debugLibrary", library }
}
}
}
}
}
}

View File

@@ -2,7 +2,14 @@
// - desktop which is used by simulation (gcc/msvc)
// - athena which is used by the roborio (arm)
apply plugin: 'cpp'
plugins {
id 'cpp'
id 'maven-publish'
}
defineWpiUtilProperties()
debugStripSetup(project)
model {
components {
@@ -11,6 +18,7 @@ model {
binaries.all {
tasks.withType(CppCompile) {
addNiLibraryLinks(linker, targetPlatform)
addWpiUtilLibraryLinks(it, linker, targetPlatform)
}
}
sources {
@@ -20,7 +28,7 @@ model {
includes = ["**/*.cpp"]
}
exportedHeaders {
srcDirs = ["include", "lib/athena/FRC_FPGA_ChipObject"]
srcDirs = ["include", "lib/athena/FRC_FPGA_ChipObject", wpiUtilInclude]
}
}
}
@@ -47,3 +55,133 @@ model {
// }
}
}
task halZip(type: Zip) {
description = 'Zips the HAL'
group = 'WPILib'
baseName = 'hal'
destinationDir = project.buildDir
duplicatesStrategy = 'exclude'
// Include the shared library file and header files from this project
model {
binaries {
withType(SharedLibraryBinarySpec) { spec ->
spec.headerDirs.each {
def normalizedIt = it.toString().replace('/', '\\')
def normalizedWPIUtil = wpiUtilInclude.toString().replace('/', '\\')
if (normalizedIt != normalizedWPIUtil) {
from(it) {
into 'include'
// We don't want to include any of the .cpp files that are in some of the header directories
exclude '**/*.cpp'
}
}
}
from(spec.sharedLibraryFile) {
into 'lib'
}
from(new File(spec.sharedLibraryFile.absolutePath + ".debug")) {
into 'lib'
}
}
}
}
// Finally, include all of the shared library objects from the ni directory
from(project.file('../ni-libraries')) {
into 'lib'
exclude 'genlinks'
exclude 'libwpi.so'
}
// Add the hal static and shared libraries as a dependency
project(':hal').tasks.whenTaskAdded { task ->
if (task.name.toLowerCase() == 'halathenastaticlibrary' || task.name.toLowerCase() == 'halathenasharedlibrary') {
halZip.dependsOn task
}
}
}
task athenaRuntimeZip(type: Zip) {
description = 'Zips the Athena Runtime libraries'
group = 'WPILib'
baseName = 'athena-runtime'
destinationDir = project.buildDir
duplicatesStrategy = 'exclude'
// Include the static library file and header files from this project
model {
binaries {
withType(SharedLibraryBinarySpec) { spec ->
spec.headerDirs.each {
from(it) {
into 'include'
// We don't want to include any of the .cpp files that are in some of the header directories
exclude '**/*.cpp'
}
}
from(spec.sharedLibraryFile) {
into 'lib'
}
from(new File(spec.sharedLibraryFile.absolutePath + ".debug")) {
into 'lib'
}
}
}
}
defineNetworkTablesProperties()
from(project.file(netTablesInclude)) {
into 'include'
}
from (file(netSharedLib)) {
into 'lib'
}
from (file(netSharedLibDebug)) {
into 'lib'
}
from (file(wpiUtilSharedLib)) {
into 'lib'
}
from (file(wpiUtilSharedLibDebug)) {
into 'lib'
}
// Add the hal static and shared libraries as a dependency
project(':hal').tasks.whenTaskAdded { task ->
if (task.name.toLowerCase() == 'halathenastaticlibrary' || task.name.toLowerCase() == 'halathenasharedlibrary') {
athenaRuntimeZip.dependsOn task
}
}
}
publishing {
publications {
hal(MavenPublication) {
artifact halZip
groupId 'edu.wpi.first.wpilib'
artifactId 'hal'
version WPILibVersion.version
}
athenaruntime(MavenPublication) {
artifact athenaRuntimeZip
groupId 'edu.wpi.first.wpilib'
artifactId 'athena-runtime'
version WPILibVersion.version
}
}
setupWpilibRepo(it)
}
build.dependsOn halZip
build.dependsOn athenaRuntimeZip

View File

@@ -39,6 +39,9 @@ void HAL_RequestInterrupts(HAL_InterruptHandle interruptHandle,
void HAL_AttachInterruptHandler(HAL_InterruptHandle interruptHandle,
HAL_InterruptHandlerFunction handler,
void* param, int32_t* status);
void HAL_AttachInterruptHandlerThreaded(HAL_InterruptHandle interruptHandle,
HAL_InterruptHandlerFunction handler,
void* param, int32_t* status);
void HAL_SetInterruptUpSourceEdge(HAL_InterruptHandle interruptHandle,
HAL_Bool risingEdge, HAL_Bool fallingEdge,
int32_t* status);

View File

@@ -20,6 +20,8 @@ typedef void (*HAL_NotifierProcessFunction)(uint64_t currentTime,
HAL_NotifierHandle HAL_InitializeNotifier(HAL_NotifierProcessFunction process,
void* param, int32_t* status);
HAL_NotifierHandle HAL_InitializeNotifierThreaded(
HAL_NotifierProcessFunction process, void* param, int32_t* status);
void HAL_CleanNotifier(HAL_NotifierHandle notifierHandle, int32_t* status);
void* HAL_GetNotifierParam(HAL_NotifierHandle notifierHandle, int32_t* status);
void HAL_UpdateNotifierAlarm(HAL_NotifierHandle notifierHandle,

View File

@@ -42,7 +42,8 @@ enum class HAL_HandleEnum {
Encoder = 13,
Compressor = 14,
Solenoid = 15,
AnalogGyro = 16
AnalogGyro = 16,
Vendor = 17
};
static inline int16_t getHandleIndex(HAL_Handle handle) {

View File

@@ -0,0 +1,111 @@
/*----------------------------------------------------------------------------*/
/* Copyright (c) FIRST 2016. 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 the root directory of */
/* the project. */
/*----------------------------------------------------------------------------*/
#pragma once
#include <stdint.h>
#include <memory>
#include <vector>
#include "HAL/Errors.h"
#include "HAL/Types.h"
#include "HAL/cpp/make_unique.h"
#include "HAL/cpp/priority_mutex.h"
#include "HAL/handles/HandlesInternal.h"
namespace hal {
/**
* The IndexedClassedHandleResource class is a way to track handles. This
* version
* allows a limited number of handles that are allocated by index.
* Because they are allocated by index, each individual index holds its own
* mutex, which reduces contention heavily.]
*
* @tparam THandle The Handle Type (Must be typedefed from HAL_Handle)
* @tparam TStruct The struct type held by this resource
* @tparam size The number of resources allowed to be allocated
* @tparam enumValue The type value stored in the handle
*
*/
template <typename THandle, typename TStruct, int16_t size,
HAL_HandleEnum enumValue>
class IndexedClassedHandleResource {
friend class IndexedClassedHandleResourceTest;
public:
IndexedClassedHandleResource(const IndexedClassedHandleResource&) = delete;
IndexedClassedHandleResource operator=(const IndexedClassedHandleResource&) =
delete;
IndexedClassedHandleResource();
THandle Allocate(int16_t index, std::shared_ptr<TStruct> toSet,
int32_t* status);
std::shared_ptr<TStruct> Get(THandle handle);
void Free(THandle handle);
private:
// Dynamic array to shrink HAL file size.
std::unique_ptr<std::shared_ptr<TStruct>[]> m_structures;
std::unique_ptr<priority_mutex[]> m_handleMutexes;
};
template <typename THandle, typename TStruct, int16_t size,
HAL_HandleEnum enumValue>
IndexedClassedHandleResource<THandle, TStruct, size,
enumValue>::IndexedClassedHandleResource() {
m_structures = std::make_unique<std::shared_ptr<TStruct>[]>(size);
m_handleMutexes = std::make_unique<priority_mutex[]>(size);
}
template <typename THandle, typename TStruct, int16_t size,
HAL_HandleEnum enumValue>
THandle
IndexedClassedHandleResource<THandle, TStruct, size, enumValue>::Allocate(
int16_t index, std::shared_ptr<TStruct> toSet, int32_t* status) {
// don't aquire the lock if we can fail early.
if (index < 0 || index >= size) {
*status = RESOURCE_OUT_OF_RANGE;
return HAL_kInvalidHandle;
}
std::lock_guard<priority_mutex> sync(m_handleMutexes[index]);
// check for allocation, otherwise allocate and return a valid handle
if (m_structures[index] != nullptr) {
*status = RESOURCE_IS_ALLOCATED;
return HAL_kInvalidHandle;
}
m_structures[index] = toSet;
return static_cast<THandle>(hal::createHandle(index, enumValue));
}
template <typename THandle, typename TStruct, int16_t size,
HAL_HandleEnum enumValue>
std::shared_ptr<TStruct> IndexedClassedHandleResource<
THandle, TStruct, size, enumValue>::Get(THandle handle) {
// get handle index, and fail early if index out of range or wrong handle
int16_t index = getHandleTypedIndex(handle, enumValue);
if (index < 0 || index >= size) {
return nullptr;
}
std::lock_guard<priority_mutex> sync(m_handleMutexes[index]);
// return structure. Null will propogate correctly, so no need to manually
// check.
return m_structures[index];
}
template <typename THandle, typename TStruct, int16_t size,
HAL_HandleEnum enumValue>
void IndexedClassedHandleResource<THandle, TStruct, size, enumValue>::Free(
THandle handle) {
// get handle index, and fail early if index out of range or wrong handle
int16_t index = getHandleTypedIndex(handle, enumValue);
if (index < 0 || index >= size) return;
// lock and deallocated handle
std::lock_guard<priority_mutex> sync(m_handleMutexes[index]);
m_structures[index].reset();
}
} // namespace hal

View File

@@ -19,8 +19,6 @@
using namespace hal;
static bool analogSampleRateSet = false;
extern "C" {
/**
* Initialize the analog input port using the given port object.
@@ -103,28 +101,9 @@ void HAL_SetAnalogSampleRate(double samplesPerSecond, int32_t* status) {
// TODO: This will change when variable size scan lists are implemented.
// TODO: Need float comparison with epsilon.
// wpi_assert(!sampleRateSet || GetSampleRate() == samplesPerSecond);
analogSampleRateSet = true;
// Compute the convert rate
uint32_t ticksPerSample =
static_cast<uint32_t>(static_cast<double>(kTimebase) / samplesPerSecond);
uint32_t ticksPerConversion =
ticksPerSample / getAnalogNumChannelsToActivate(status);
// ticksPerConversion must be at least 80
if (ticksPerConversion < 80) {
if ((*status) >= 0) *status = SAMPLE_RATE_TOO_HIGH;
ticksPerConversion = 80;
}
// Atomically set the scan size and the convert rate so that the sample rate
// is constant
tAI::tConfig config;
config.ScanSize = getAnalogNumChannelsToActivate(status);
config.ConvertRate = ticksPerConversion;
analogInputSystem->writeConfig(config, status);
// Indicate that the scan size has been commited to hardware.
setAnalogNumChannelsToActivate(0);
initializeAnalog(status);
if (*status != 0) return;
setAnalogSampleRate(samplesPerSecond, status);
}
/**
@@ -136,6 +115,8 @@ void HAL_SetAnalogSampleRate(double samplesPerSecond, int32_t* status) {
* @return Sample rate.
*/
double HAL_GetAnalogSampleRate(int32_t* status) {
initializeAnalog(status);
if (*status != 0) return 0;
uint32_t ticksPerConversion = analogInputSystem->readLoopTiming(status);
uint32_t ticksPerSample =
ticksPerConversion * getAnalogNumActiveChannels(status);

View File

@@ -7,6 +7,8 @@
#include "AnalogInternal.h"
#include <atomic>
#include "ChipObject.h"
#include "HAL/AnalogInput.h"
#include "HAL/cpp/priority_mutex.h"
@@ -23,18 +25,21 @@ IndexedHandleResource<HAL_AnalogInputHandle, hal::AnalogPort, kNumAnalogInputs,
static int32_t analogNumChannelsToActivate = 0;
bool analogSystemInitialized = false;
static std::atomic<bool> analogSystemInitialized{false};
bool analogSampleRateSet = false;
/**
* Initialize the analog System.
*/
void initializeAnalog(int32_t* status) {
if (analogSystemInitialized) return;
std::lock_guard<priority_recursive_mutex> sync(analogRegisterWindowMutex);
if (analogSystemInitialized) return;
analogInputSystem.reset(tAI::create(status));
analogOutputSystem.reset(tAO::create(status));
setAnalogNumChannelsToActivate(kNumAnalogInputs);
HAL_SetAnalogSampleRate(kDefaultSampleRate, status);
setAnalogSampleRate(kDefaultSampleRate, status);
analogSystemInitialized = true;
}
@@ -66,6 +71,41 @@ int32_t getAnalogNumChannelsToActivate(int32_t* status) {
return analogNumChannelsToActivate;
}
/**
* Set the sample rate.
*
* This is a global setting for the Athena and effects all channels.
*
* @param samplesPerSecond The number of samples per channel per second.
*/
void setAnalogSampleRate(double samplesPerSecond, int32_t* status) {
// TODO: This will change when variable size scan lists are implemented.
// TODO: Need float comparison with epsilon.
// wpi_assert(!sampleRateSet || GetSampleRate() == samplesPerSecond);
analogSampleRateSet = true;
// Compute the convert rate
uint32_t ticksPerSample =
static_cast<uint32_t>(static_cast<double>(kTimebase) / samplesPerSecond);
uint32_t ticksPerConversion =
ticksPerSample / getAnalogNumChannelsToActivate(status);
// ticksPerConversion must be at least 80
if (ticksPerConversion < 80) {
if ((*status) >= 0) *status = SAMPLE_RATE_TOO_HIGH;
ticksPerConversion = 80;
}
// Atomically set the scan size and the convert rate so that the sample rate
// is constant
tAI::tConfig config;
config.ScanSize = getAnalogNumChannelsToActivate(status);
config.ConvertRate = ticksPerConversion;
analogInputSystem->writeConfig(config, status);
// Indicate that the scan size has been commited to hardware.
setAnalogNumChannelsToActivate(0);
}
/**
* Set the number of active channels.
*

View File

@@ -27,6 +27,7 @@ static const uint32_t kAccumulatorChannels[] = {0, 1};
extern std::unique_ptr<tAI> analogInputSystem;
extern std::unique_ptr<tAO> analogOutputSystem;
extern priority_recursive_mutex analogRegisterWindowMutex;
extern bool analogSampleRateSet;
struct AnalogPort {
uint8_t channel;
@@ -40,7 +41,6 @@ extern IndexedHandleResource<HAL_AnalogInputHandle, hal::AnalogPort,
int32_t getAnalogNumActiveChannels(int32_t* status);
int32_t getAnalogNumChannelsToActivate(int32_t* status);
void setAnalogNumChannelsToActivate(int32_t channels);
void setAnalogSampleRate(double samplesPerSecond, int32_t* status);
void initializeAnalog(int32_t* status);
extern bool analogSystemInitialized;
} // namespace hal

View File

@@ -35,7 +35,7 @@ HAL_DigitalHandle HAL_InitializeDIOPort(HAL_PortHandle portHandle,
if (*status != 0) return HAL_kInvalidHandle;
int16_t channel = getPortHandleChannel(portHandle);
if (channel == InvalidHandleIndex) {
if (channel == InvalidHandleIndex || channel >= kNumDigitalChannels) {
*status = PARAMETER_OUT_OF_RANGE;
return HAL_kInvalidHandle;
}
@@ -142,6 +142,8 @@ void HAL_SetDigitalPWMRate(double rate, int32_t* status) {
// Currently rounding in the log rate domain... heavy weight toward picking a
// higher freq.
// TODO: Round in the linear rate domain.
initializeDigital(status);
if (*status != 0) return;
uint8_t pwmPeriodPower = static_cast<uint8_t>(
std::log(1.0 / (pwmSystem->readLoopTiming(status) * 0.25E-6 * rate)) /
std::log(2.0) +
@@ -371,6 +373,8 @@ HAL_Bool HAL_IsPulsing(HAL_DigitalHandle dioPortHandle, int32_t* status) {
* @return A pulse on some line is in progress
*/
HAL_Bool HAL_IsAnyPulsing(int32_t* status) {
initializeDigital(status);
if (*status != 0) return false;
tDIO::tPulse pulseRegister = digitalSystem->readPulse(status);
return pulseRegister.Headers != 0 && pulseRegister.MXP != 0;
}
@@ -436,6 +440,8 @@ int32_t HAL_GetFilterSelect(HAL_DigitalHandle dioPortHandle, int32_t* status) {
* counted as a transition.
*/
void HAL_SetFilterPeriod(int32_t filterIndex, int64_t value, int32_t* status) {
initializeDigital(status);
if (*status != 0) return;
std::lock_guard<priority_recursive_mutex> sync(digitalDIOMutex);
digitalSystem->writeFilterPeriodHdr(filterIndex, value, status);
if (*status == 0) {
@@ -456,6 +462,8 @@ void HAL_SetFilterPeriod(int32_t filterIndex, int64_t value, int32_t* status) {
* counted as a transition.
*/
int64_t HAL_GetFilterPeriod(int32_t filterIndex, int32_t* status) {
initializeDigital(status);
if (*status != 0) return 0;
uint32_t hdrPeriod = 0;
uint32_t mxpPeriod = 0;
{

View File

@@ -7,6 +7,7 @@
#include "DigitalInternal.h"
#include <atomic>
#include <mutex>
#include <thread>
@@ -27,7 +28,8 @@ std::unique_ptr<tDIO> digitalSystem;
std::unique_ptr<tRelay> relaySystem;
std::unique_ptr<tPWM> pwmSystem;
bool digitalSystemsInitialized = false;
static std::atomic<bool> digitalSystemsInitialized{false};
static priority_mutex initializeMutex;
DigitalHandleResource<HAL_DigitalHandle, DigitalPort,
kNumDigitalChannels + kNumPWMHeaders>
@@ -37,6 +39,11 @@ DigitalHandleResource<HAL_DigitalHandle, DigitalPort,
* Initialize the digital system.
*/
void initializeDigital(int32_t* status) {
// Initial check, as if it's true initialization has finished
if (digitalSystemsInitialized) return;
std::lock_guard<priority_mutex> lock(initializeMutex);
// Second check in case another thread was waiting
if (digitalSystemsInitialized) return;
digitalSystem.reset(tDIO::create(status));

View File

@@ -63,8 +63,6 @@ extern std::unique_ptr<tDIO> digitalSystem;
extern std::unique_ptr<tRelay> relaySystem;
extern std::unique_ptr<tPWM> pwmSystem;
extern bool digitalSystemsInitialized;
struct DigitalPort {
uint8_t channel;
bool configSet = false;

View File

@@ -1,10 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __FRC_FPGA_ChipObject_Aliases_h__
#define __FRC_FPGA_ChipObject_Aliases_h__
#define nRuntimeFPGANamespace nFRC_2012_1_6_4
#define nInvariantFPGANamespace nFRC_C0EF_1_1_0
#endif // __FRC_FPGA_ChipObject_Aliases_h__

View File

@@ -4,6 +4,6 @@
#ifndef __RoboRIO_FRC_ChipObject_Aliases_h__
#define __RoboRIO_FRC_ChipObject_Aliases_h__
#define nRoboRIO_FPGANamespace nFRC_2016_16_1_0
#define nRoboRIO_FPGANamespace nFRC_2017_17_0_2
#endif // __RoboRIO_FRC_ChipObject_Aliases_h__

View File

@@ -1,7 +1,7 @@
/*
* FPGA Interface C API 15.0 header file.
* FPGA Interface C API 16.0 header file.
*
* Copyright (c) 2015,
* Copyright (c) 2016,
* National Instruments Corporation.
* All rights reserved.
*/
@@ -138,7 +138,7 @@
*/
#if NiFpga_Cpp || NiFpga_C99
/* The inline keyword exists in C++ and C99. */
#define NiFpga_Inline inline
#define NiFpga_Inline inline
#elif NiFpga_Msvc
/* Visual C++ (at least since 6.0) also supports an alternate keyword. */
#define NiFpga_Inline __inline
@@ -275,12 +275,6 @@ static const NiFpga_Status NiFpga_Status_ResourceNotFound = -52006;
*/
static const NiFpga_Status NiFpga_Status_ResourceNotInitialized = -52010;
/**
* A hardware failure has occurred. The operation could not be completed as
* specified.
*/
static const NiFpga_Status NiFpga_Status_HardwareFault = -52018;
/**
* The FPGA is already running.
*/
@@ -438,6 +432,14 @@ static const NiFpga_Status NiFpga_Status_ElementsNotPermissibleToBeAcquired = -6
*/
static const NiFpga_Status NiFpga_Status_FpgaBusyConfiguration = -61252;
/**
* LabVIEW FPGA does not support Close and Reset if Last Reference for bitfiles
* that do not support Reset. Pass the
* NiFpga_CloseAttribute_NoResetIfLastSession attribute to NiFpga_Close instead
* of 0.
*/
static const NiFpga_Status NiFpga_Status_CloseAndResetCalledWithResetNotSupported = -61253;
/**
* An unexpected internal error occurred.
*/
@@ -530,6 +532,12 @@ static const NiFpga_Status NiFpga_Status_SignatureMismatch = -63106;
*/
static const NiFpga_Status NiFpga_Status_IncompatibleBitfile = -63107;
/**
* A hardware failure has occurred. The operation could not be completed as
* specified.
*/
static const NiFpga_Status NiFpga_Status_HardwareFault = -63150;
/**
* Either the supplied resource name is invalid as a RIO resource name, or the
* device was not found. Use MAX to find the proper resource name for the
@@ -863,6 +871,32 @@ NiFpga_Status NiFpga_ReadU64(NiFpga_Session session,
uint32_t indicator,
uint64_t* value);
/**
* Reads a single-precision floating-point value from a given indicator or
* control.
*
* @param session handle to a currently open session
* @param indicator indicator or control from which to read
* @param value outputs the value that was read
* @return result of the call
*/
NiFpga_Status NiFpga_ReadSgl(NiFpga_Session session,
uint32_t indicator,
float* value);
/**
* Reads a double-precision floating-point value from a given indicator or
* control.
*
* @param session handle to a currently open session
* @param indicator indicator or control from which to read
* @param value outputs the value that was read
* @return result of the call
*/
NiFpga_Status NiFpga_ReadDbl(NiFpga_Session session,
uint32_t indicator,
double* value);
/**
* Writes a boolean value to a given control or indicator.
*
@@ -971,6 +1005,32 @@ NiFpga_Status NiFpga_WriteU64(NiFpga_Session session,
uint32_t control,
uint64_t value);
/**
* Writes a single-precision floating-point value to a given control or
* indicator.
*
* @param session handle to a currently open session
* @param control control or indicator to which to write
* @param value value to write
* @return result of the call
*/
NiFpga_Status NiFpga_WriteSgl(NiFpga_Session session,
uint32_t control,
float value);
/**
* Writes a double-precision floating-point value to a given control or
* indicator.
*
* @param session handle to a currently open session
* @param control control or indicator to which to write
* @param value value to write
* @return result of the call
*/
NiFpga_Status NiFpga_WriteDbl(NiFpga_Session session,
uint32_t control,
double value);
/**
* Reads an entire array of boolean values from a given array indicator or
* control.
@@ -1133,6 +1193,42 @@ NiFpga_Status NiFpga_ReadArrayU64(NiFpga_Session session,
uint64_t* array,
size_t size);
/**
* Reads an entire array of single-precision floating-point values from a
* given array indicator or control.
*
* @warning The size passed must be the exact number of elements in the
* indicator or control.
*
* @param session handle to a currently open session
* @param indicator indicator or control from which to read
* @param array outputs the entire array that was read
* @param size exact number of elements in the indicator or control
* @return result of the call
*/
NiFpga_Status NiFpga_ReadArraySgl(NiFpga_Session session,
uint32_t indicator,
float* array,
size_t size);
/**
* Reads an entire array of double-precision floating-point values from a
* given array indicator or control.
*
* @warning The size passed must be the exact number of elements in the
* indicator or control.
*
* @param session handle to a currently open session
* @param indicator indicator or control from which to read
* @param array outputs the entire array that was read
* @param size exact number of elements in the indicator or control
* @return result of the call
*/
NiFpga_Status NiFpga_ReadArrayDbl(NiFpga_Session session,
uint32_t indicator,
double* array,
size_t size);
/**
* Writes an entire array of boolean values to a given array control or
* indicator.
@@ -1295,6 +1391,42 @@ NiFpga_Status NiFpga_WriteArrayU64(NiFpga_Session session,
const uint64_t* array,
size_t size);
/**
* Writes an entire array of single-precision floating-point values to a given
* array control or indicator.
*
* @warning The size passed must be the exact number of elements in the
* control or indicator.
*
* @param session handle to a currently open session
* @param control control or indicator to which to write
* @param array entire array to write
* @param size exact number of elements in the control or indicator
* @return result of the call
*/
NiFpga_Status NiFpga_WriteArraySgl(NiFpga_Session session,
uint32_t control,
const float* array,
size_t size);
/**
* Writes an entire array of double-precision floating-point values to a given
* array control or indicator.
*
* @warning The size passed must be the exact number of elements in the
* control or indicator.
*
* @param session handle to a currently open session
* @param control control or indicator to which to write
* @param array entire array to write
* @param size exact number of elements in the control or indicator
* @return result of the call
*/
NiFpga_Status NiFpga_WriteArrayDbl(NiFpga_Session session,
uint32_t control,
const double* array,
size_t size);
/**
* Enumeration of all 32 possible IRQs. Multiple IRQs can be bitwise ORed
* together like this:
@@ -1633,6 +1765,44 @@ NiFpga_Status NiFpga_ReadFifoU64(NiFpga_Session session,
uint32_t timeout,
size_t* elementsRemaining);
/**
* Reads from a target-to-host FIFO of single-precision floating-point values.
*
* @param session handle to a currently open session
* @param fifo target-to-host FIFO from which to read
* @param data outputs the data that was read
* @param numberOfElements number of elements to read
* @param timeout timeout in milliseconds, or NiFpga_InfiniteTimeout
* @param elementsRemaining if non-NULL, outputs the number of elements
* remaining in the host memory part of the DMA FIFO
* @return result of the call
*/
NiFpga_Status NiFpga_ReadFifoSgl(NiFpga_Session session,
uint32_t fifo,
float* data,
size_t numberOfElements,
uint32_t timeout,
size_t* elementsRemaining);
/**
* Reads from a target-to-host FIFO of double-precision floating-point values.
*
* @param session handle to a currently open session
* @param fifo target-to-host FIFO from which to read
* @param data outputs the data that was read
* @param numberOfElements number of elements to read
* @param timeout timeout in milliseconds, or NiFpga_InfiniteTimeout
* @param elementsRemaining if non-NULL, outputs the number of elements
* remaining in the host memory part of the DMA FIFO
* @return result of the call
*/
NiFpga_Status NiFpga_ReadFifoDbl(NiFpga_Session session,
uint32_t fifo,
double* data,
size_t numberOfElements,
uint32_t timeout,
size_t* elementsRemaining);
/**
* Writes to a host-to-target FIFO of booleans.
*
@@ -1813,6 +1983,46 @@ NiFpga_Status NiFpga_WriteFifoU64(NiFpga_Session session,
uint32_t timeout,
size_t* emptyElementsRemaining);
/**
* Writes to a host-to-target FIFO of single-precision floating-point values.
*
* @param session handle to a currently open session
* @param fifo host-to-target FIFO to which to write
* @param data data to write
* @param numberOfElements number of elements to write
* @param timeout timeout in milliseconds, or NiFpga_InfiniteTimeout
* @param emptyElementsRemaining if non-NULL, outputs the number of empty
* elements remaining in the host memory part of
* the DMA FIFO
* @return result of the call
*/
NiFpga_Status NiFpga_WriteFifoSgl(NiFpga_Session session,
uint32_t fifo,
const float* data,
size_t numberOfElements,
uint32_t timeout,
size_t* emptyElementsRemaining);
/**
* Writes to a host-to-target FIFO of double-precision floating-point values.
*
* @param session handle to a currently open session
* @param fifo host-to-target FIFO to which to write
* @param data data to write
* @param numberOfElements number of elements to write
* @param timeout timeout in milliseconds, or NiFpga_InfiniteTimeout
* @param emptyElementsRemaining if non-NULL, outputs the number of empty
* elements remaining in the host memory part of
* the DMA FIFO
* @return result of the call
*/
NiFpga_Status NiFpga_WriteFifoDbl(NiFpga_Session session,
uint32_t fifo,
const double* data,
size_t numberOfElements,
uint32_t timeout,
size_t* emptyElementsRemaining);
/**
* Acquires elements for reading from a target-to-host FIFO of booleans.
*
@@ -2118,6 +2328,74 @@ NiFpga_Status NiFpga_AcquireFifoReadElementsU64(
size_t* elementsAcquired,
size_t* elementsRemaining);
/**
* Acquires elements for reading from a target-to-host FIFO of single-precision
* floating-point values.
*
* Acquiring, reading, and releasing FIFO elements prevents the need to copy
* the contents of elements from the host memory buffer to a separate
* user-allocated buffer before reading. The FPGA target cannot write to
* elements acquired by the host. Therefore, the host must release elements
* after reading them. The number of elements acquired may differ from the
* number of elements requested if, for example, the number of elements
* requested reaches the end of the host memory buffer. Always release all
* acquired elements before closing the session. Do not attempt to access FIFO
* elements after the elements are released or the session is closed.
*
* @param session handle to a currently open session
* @param fifo target-to-host FIFO from which to read
* @param elements outputs a pointer to the elements acquired
* @param elementsRequested requested number of elements
* @param timeout timeout in milliseconds, or NiFpga_InfiniteTimeout
* @param elementsAcquired actual number of elements acquired, which may be
* less than the requested number
* @param elementsRemaining if non-NULL, outputs the number of elements
* remaining in the host memory part of the DMA FIFO
* @return result of the call
*/
NiFpga_Status NiFpga_AcquireFifoReadElementsSgl(
NiFpga_Session session,
uint32_t fifo,
float** elements,
size_t elementsRequested,
uint32_t timeout,
size_t* elementsAcquired,
size_t* elementsRemaining);
/**
* Acquires elements for reading from a target-to-host FIFO of double-precision
* floating-point values.
*
* Acquiring, reading, and releasing FIFO elements prevents the need to copy
* the contents of elements from the host memory buffer to a separate
* user-allocated buffer before reading. The FPGA target cannot write to
* elements acquired by the host. Therefore, the host must release elements
* after reading them. The number of elements acquired may differ from the
* number of elements requested if, for example, the number of elements
* requested reaches the end of the host memory buffer. Always release all
* acquired elements before closing the session. Do not attempt to access FIFO
* elements after the elements are released or the session is closed.
*
* @param session handle to a currently open session
* @param fifo target-to-host FIFO from which to read
* @param elements outputs a pointer to the elements acquired
* @param elementsRequested requested number of elements
* @param timeout timeout in milliseconds, or NiFpga_InfiniteTimeout
* @param elementsAcquired actual number of elements acquired, which may be
* less than the requested number
* @param elementsRemaining if non-NULL, outputs the number of elements
* remaining in the host memory part of the DMA FIFO
* @return result of the call
*/
NiFpga_Status NiFpga_AcquireFifoReadElementsDbl(
NiFpga_Session session,
uint32_t fifo,
double** elements,
size_t elementsRequested,
uint32_t timeout,
size_t* elementsAcquired,
size_t* elementsRemaining);
/**
* Acquires elements for writing to a host-to-target FIFO of booleans.
*
@@ -2423,6 +2701,74 @@ NiFpga_Status NiFpga_AcquireFifoWriteElementsU64(
size_t* elementsAcquired,
size_t* elementsRemaining);
/**
* Acquires elements for writing to a host-to-target FIFO of single-precision
* floating-point values.
*
* Acquiring, writing, and releasing FIFO elements prevents the need to write
* first into a separate user-allocated buffer and then copy the contents of
* elements to the host memory buffer. The FPGA target cannot read elements
* acquired by the host. Therefore, the host must release elements after
* writing to them. The number of elements acquired may differ from the number
* of elements requested if, for example, the number of elements requested
* reaches the end of the host memory buffer. Always release all acquired
* elements before closing the session. Do not attempt to access FIFO elements
* after the elements are released or the session is closed.
*
* @param session handle to a currently open session
* @param fifo host-to-target FIFO to which to write
* @param elements outputs a pointer to the elements acquired
* @param elementsRequested requested number of elements
* @param timeout timeout in milliseconds, or NiFpga_InfiniteTimeout
* @param elementsAcquired actual number of elements acquired, which may be
* less than the requested number
* @param elementsRemaining if non-NULL, outputs the number of elements
* remaining in the host memory part of the DMA FIFO
* @return result of the call
*/
NiFpga_Status NiFpga_AcquireFifoWriteElementsSgl(
NiFpga_Session session,
uint32_t fifo,
float** elements,
size_t elementsRequested,
uint32_t timeout,
size_t* elementsAcquired,
size_t* elementsRemaining);
/**
* Acquires elements for writing to a host-to-target FIFO of single-precision
* floating-point values.
*
* Acquiring, writing, and releasing FIFO elements prevents the need to write
* first into a separate user-allocated buffer and then copy the contents of
* elements to the host memory buffer. The FPGA target cannot read elements
* acquired by the host. Therefore, the host must release elements after
* writing to them. The number of elements acquired may differ from the number
* of elements requested if, for example, the number of elements requested
* reaches the end of the host memory buffer. Always release all acquired
* elements before closing the session. Do not attempt to access FIFO elements
* after the elements are released or the session is closed.
*
* @param session handle to a currently open session
* @param fifo host-to-target FIFO to which to write
* @param elements outputs a pointer to the elements acquired
* @param elementsRequested requested number of elements
* @param timeout timeout in milliseconds, or NiFpga_InfiniteTimeout
* @param elementsAcquired actual number of elements acquired, which may be
* less than the requested number
* @param elementsRemaining if non-NULL, outputs the number of elements
* remaining in the host memory part of the DMA FIFO
* @return result of the call
*/
NiFpga_Status NiFpga_AcquireFifoWriteElementsDbl(
NiFpga_Session session,
uint32_t fifo,
double** elements,
size_t elementsRequested,
uint32_t timeout,
size_t* elementsAcquired,
size_t* elementsRemaining);
/**
* Releases previously acquired FIFO elements.
*
@@ -2445,7 +2791,9 @@ NiFpga_Status NiFpga_ReleaseFifoElements(NiFpga_Session session,
*
* @param session handle to a currently open session
* @param fifo peer-to-peer FIFO
* @param endpoint outputs the endpoint reference
* @param endpoint Outputs the endpoint reference.
* The actual type is a nip2p_tEndpointHandle usable by
* the NI Peer-to-Peer Streaming C/C++ API.
* @return result of the call
*/
NiFpga_Status NiFpga_GetPeerToPeerFifoEndpoint(NiFpga_Session session,

View File

@@ -1,15 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_C0EF_1_1_0_nInterfaceGlobals_h__
#define __nFRC_C0EF_1_1_0_nInterfaceGlobals_h__
namespace nFPGA
{
namespace nFRC_C0EF_1_1_0
{
extern unsigned int g_currentTargetClass;
}
}
#endif // __nFRC_C0EF_1_1_0_nInterfaceGlobals_h__

View File

@@ -1,73 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_C0EF_1_1_0_AI_h__
#define __nFRC_C0EF_1_1_0_AI_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_C0EF_1_1_0
{
class tAI
{
public:
tAI(){}
virtual ~tAI(){}
virtual tSystemInterface* getSystemInterface() = 0;
static tAI* create(unsigned char sys_index, tRioStatusCode *status);
virtual unsigned char getSystemIndex() = 0;
typedef enum
{
kNumSystems = 2,
} tIfaceConstants;
typedef enum
{
} tCalOK_IfaceConstants;
virtual bool readCalOK(tRioStatusCode *status) = 0;
typedef enum
{
} tDoneTime_IfaceConstants;
virtual unsigned int readDoneTime(tRioStatusCode *status) = 0;
typedef enum
{
kNumOffsetRegisters = 8,
} tOffset_IfaceConstants;
virtual signed int readOffset(unsigned char reg_index, tRioStatusCode *status) = 0;
typedef enum
{
kNumLSBWeightRegisters = 8,
} tLSBWeight_IfaceConstants;
virtual unsigned int readLSBWeight(unsigned char reg_index, tRioStatusCode *status) = 0;
private:
tAI(const tAI&);
void operator=(const tAI&);
};
}
}
#endif // __nFRC_C0EF_1_1_0_AI_h__

View File

@@ -1,69 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_C0EF_1_1_0_Global_h__
#define __nFRC_C0EF_1_1_0_Global_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_C0EF_1_1_0
{
class tGlobal
{
public:
tGlobal(){}
virtual ~tGlobal(){}
virtual tSystemInterface* getSystemInterface() = 0;
static tGlobal* create(tRioStatusCode *status);
typedef enum
{
kNumSystems = 1,
} tIfaceConstants;
typedef enum
{
} tVersion_IfaceConstants;
virtual unsigned short readVersion(tRioStatusCode *status) = 0;
typedef enum
{
} tLocalTime_IfaceConstants;
virtual unsigned int readLocalTime(tRioStatusCode *status) = 0;
typedef enum
{
} tRevision_IfaceConstants;
virtual unsigned int readRevision(tRioStatusCode *status) = 0;
typedef enum
{
} tReserved_IfaceConstants;
virtual unsigned char readReserved(tRioStatusCode *status) = 0;
private:
tGlobal(const tGlobal&);
void operator=(const tGlobal&);
};
}
}
#endif // __nFRC_C0EF_1_1_0_Global_h__

View File

@@ -1,79 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_C0EF_1_1_0_LoadOut_h__
#define __nFRC_C0EF_1_1_0_LoadOut_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_C0EF_1_1_0
{
class tLoadOut
{
public:
tLoadOut(){}
virtual ~tLoadOut(){}
virtual tSystemInterface* getSystemInterface() = 0;
static tLoadOut* create(tRioStatusCode *status);
typedef enum
{
kNumSystems = 1,
} tIfaceConstants;
typedef enum
{
} tReady_IfaceConstants;
virtual bool readReady(tRioStatusCode *status) = 0;
typedef enum
{
} tDoneTime_IfaceConstants;
virtual unsigned int readDoneTime(tRioStatusCode *status) = 0;
typedef enum
{
kNumVendorIDRegisters = 8,
} tVendorID_IfaceConstants;
virtual unsigned short readVendorID(unsigned char reg_index, tRioStatusCode *status) = 0;
typedef enum
{
kNumSerialNumberRegisters = 8,
} tSerialNumber_IfaceConstants;
virtual unsigned int readSerialNumber(unsigned char reg_index, tRioStatusCode *status) = 0;
typedef enum
{
kNumModuleIDRegisters = 8,
} tModuleID_IfaceConstants;
virtual unsigned short readModuleID(unsigned char reg_index, tRioStatusCode *status) = 0;
private:
tLoadOut(const tLoadOut&);
void operator=(const tLoadOut&);
};
}
}
#endif // __nFRC_C0EF_1_1_0_LoadOut_h__

View File

@@ -1,15 +1,15 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_nInterfaceGlobals_h__
#define __nFRC_2016_16_1_0_nInterfaceGlobals_h__
#ifndef __nFRC_2017_17_0_2_nInterfaceGlobals_h__
#define __nFRC_2017_17_0_2_nInterfaceGlobals_h__
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
extern unsigned int g_currentTargetClass;
}
}
#endif // __nFRC_2016_16_1_0_nInterfaceGlobals_h__
#endif // __nFRC_2017_17_0_2_nInterfaceGlobals_h__

View File

@@ -1,14 +1,14 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_AI_h__
#define __nFRC_2016_16_1_0_AI_h__
#ifndef __nFRC_2017_17_0_2_AI_h__
#define __nFRC_2017_17_0_2_AI_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
class tAI
@@ -140,4 +140,4 @@ private:
}
}
#endif // __nFRC_2016_16_1_0_AI_h__
#endif // __nFRC_2017_17_0_2_AI_h__

View File

@@ -1,14 +1,14 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_AO_h__
#define __nFRC_2016_16_1_0_AO_h__
#ifndef __nFRC_2017_17_0_2_AO_h__
#define __nFRC_2017_17_0_2_AO_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
class tAO
@@ -47,4 +47,4 @@ private:
}
}
#endif // __nFRC_2016_16_1_0_AO_h__
#endif // __nFRC_2017_17_0_2_AO_h__

View File

@@ -1,14 +1,14 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_Accel_h__
#define __nFRC_2016_16_1_0_Accel_h__
#ifndef __nFRC_2017_17_0_2_Accel_h__
#define __nFRC_2017_17_0_2_Accel_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
class tAccel
@@ -99,4 +99,4 @@ private:
}
}
#endif // __nFRC_2016_16_1_0_Accel_h__
#endif // __nFRC_2017_17_0_2_Accel_h__

View File

@@ -1,14 +1,14 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_Accumulator_h__
#define __nFRC_2016_16_1_0_Accumulator_h__
#ifndef __nFRC_2017_17_0_2_Accumulator_h__
#define __nFRC_2017_17_0_2_Accumulator_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
class tAccumulator
@@ -84,4 +84,4 @@ private:
}
}
#endif // __nFRC_2016_16_1_0_Accumulator_h__
#endif // __nFRC_2017_17_0_2_Accumulator_h__

View File

@@ -1,14 +1,14 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_Alarm_h__
#define __nFRC_2016_16_1_0_Alarm_h__
#ifndef __nFRC_2017_17_0_2_Alarm_h__
#define __nFRC_2017_17_0_2_Alarm_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
class tAlarm
@@ -54,4 +54,4 @@ private:
}
}
#endif // __nFRC_2016_16_1_0_Alarm_h__
#endif // __nFRC_2017_17_0_2_Alarm_h__

View File

@@ -1,14 +1,14 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_AnalogTrigger_h__
#define __nFRC_2016_16_1_0_AnalogTrigger_h__
#ifndef __nFRC_2017_17_0_2_AnalogTrigger_h__
#define __nFRC_2017_17_0_2_AnalogTrigger_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
class tAnalogTrigger
@@ -126,4 +126,4 @@ private:
}
}
#endif // __nFRC_2016_16_1_0_AnalogTrigger_h__
#endif // __nFRC_2017_17_0_2_AnalogTrigger_h__

View File

@@ -1,14 +1,14 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_BIST_h__
#define __nFRC_2016_16_1_0_BIST_h__
#ifndef __nFRC_2017_17_0_2_BIST_h__
#define __nFRC_2017_17_0_2_BIST_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
class tBIST
@@ -87,4 +87,4 @@ private:
}
}
#endif // __nFRC_2016_16_1_0_BIST_h__
#endif // __nFRC_2017_17_0_2_BIST_h__

View File

@@ -1,14 +1,14 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_Counter_h__
#define __nFRC_2016_16_1_0_Counter_h__
#ifndef __nFRC_2017_17_0_2_Counter_h__
#define __nFRC_2017_17_0_2_Counter_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
class tCounter
@@ -216,4 +216,4 @@ private:
}
}
#endif // __nFRC_2016_16_1_0_Counter_h__
#endif // __nFRC_2017_17_0_2_Counter_h__

View File

@@ -1,14 +1,14 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_DIO_h__
#define __nFRC_2016_16_1_0_DIO_h__
#ifndef __nFRC_2017_17_0_2_DIO_h__
#define __nFRC_2017_17_0_2_DIO_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
class tDIO
@@ -30,11 +30,13 @@ public:
struct{
#ifdef __vxworks
unsigned Headers : 10;
unsigned Reserved : 6;
unsigned SPIPort : 5;
unsigned Reserved : 1;
unsigned MXP : 16;
#else
unsigned MXP : 16;
unsigned Reserved : 6;
unsigned Reserved : 1;
unsigned SPIPort : 5;
unsigned Headers : 10;
#endif
};
@@ -47,11 +49,13 @@ public:
struct{
#ifdef __vxworks
unsigned Headers : 10;
unsigned Reserved : 6;
unsigned SPIPort : 5;
unsigned Reserved : 1;
unsigned MXP : 16;
#else
unsigned MXP : 16;
unsigned Reserved : 6;
unsigned Reserved : 1;
unsigned SPIPort : 5;
unsigned Headers : 10;
#endif
};
@@ -64,11 +68,13 @@ public:
struct{
#ifdef __vxworks
unsigned Headers : 10;
unsigned Reserved : 6;
unsigned SPIPort : 5;
unsigned Reserved : 1;
unsigned MXP : 16;
#else
unsigned MXP : 16;
unsigned Reserved : 6;
unsigned Reserved : 1;
unsigned SPIPort : 5;
unsigned Headers : 10;
#endif
};
@@ -81,11 +87,13 @@ public:
struct{
#ifdef __vxworks
unsigned Headers : 10;
unsigned Reserved : 6;
unsigned SPIPort : 5;
unsigned Reserved : 1;
unsigned MXP : 16;
#else
unsigned MXP : 16;
unsigned Reserved : 6;
unsigned Reserved : 1;
unsigned SPIPort : 5;
unsigned Headers : 10;
#endif
};
@@ -102,10 +110,12 @@ public:
virtual void writeDO(tDO value, tRioStatusCode *status) = 0;
virtual void writeDO_Headers(unsigned short value, tRioStatusCode *status) = 0;
virtual void writeDO_SPIPort(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeDO_Reserved(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeDO_MXP(unsigned short value, tRioStatusCode *status) = 0;
virtual tDO readDO(tRioStatusCode *status) = 0;
virtual unsigned short readDO_Headers(tRioStatusCode *status) = 0;
virtual unsigned char readDO_SPIPort(tRioStatusCode *status) = 0;
virtual unsigned char readDO_Reserved(tRioStatusCode *status) = 0;
virtual unsigned short readDO_MXP(tRioStatusCode *status) = 0;
@@ -143,10 +153,12 @@ public:
virtual void writeOutputEnable(tOutputEnable value, tRioStatusCode *status) = 0;
virtual void writeOutputEnable_Headers(unsigned short value, tRioStatusCode *status) = 0;
virtual void writeOutputEnable_SPIPort(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeOutputEnable_Reserved(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeOutputEnable_MXP(unsigned short value, tRioStatusCode *status) = 0;
virtual tOutputEnable readOutputEnable(tRioStatusCode *status) = 0;
virtual unsigned short readOutputEnable_Headers(tRioStatusCode *status) = 0;
virtual unsigned char readOutputEnable_SPIPort(tRioStatusCode *status) = 0;
virtual unsigned char readOutputEnable_Reserved(tRioStatusCode *status) = 0;
virtual unsigned short readOutputEnable_MXP(tRioStatusCode *status) = 0;
@@ -166,10 +178,12 @@ public:
virtual void writePulse(tPulse value, tRioStatusCode *status) = 0;
virtual void writePulse_Headers(unsigned short value, tRioStatusCode *status) = 0;
virtual void writePulse_SPIPort(unsigned char value, tRioStatusCode *status) = 0;
virtual void writePulse_Reserved(unsigned char value, tRioStatusCode *status) = 0;
virtual void writePulse_MXP(unsigned short value, tRioStatusCode *status) = 0;
virtual tPulse readPulse(tRioStatusCode *status) = 0;
virtual unsigned short readPulse_Headers(tRioStatusCode *status) = 0;
virtual unsigned char readPulse_SPIPort(tRioStatusCode *status) = 0;
virtual unsigned char readPulse_Reserved(tRioStatusCode *status) = 0;
virtual unsigned short readPulse_MXP(tRioStatusCode *status) = 0;
@@ -180,6 +194,7 @@ public:
virtual tDI readDI(tRioStatusCode *status) = 0;
virtual unsigned short readDI_Headers(tRioStatusCode *status) = 0;
virtual unsigned char readDI_SPIPort(tRioStatusCode *status) = 0;
virtual unsigned char readDI_Reserved(tRioStatusCode *status) = 0;
virtual unsigned short readDI_MXP(tRioStatusCode *status) = 0;
@@ -245,4 +260,4 @@ private:
}
}
#endif // __nFRC_2016_16_1_0_DIO_h__
#endif // __nFRC_2017_17_0_2_DIO_h__

View File

@@ -1,14 +1,14 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_DMA_h__
#define __nFRC_2016_16_1_0_DMA_h__
#ifndef __nFRC_2017_17_0_2_DMA_h__
#define __nFRC_2017_17_0_2_DMA_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
class tDMA
@@ -194,4 +194,4 @@ private:
}
}
#endif // __nFRC_2016_16_1_0_DMA_h__
#endif // __nFRC_2017_17_0_2_DMA_h__

View File

@@ -1,14 +1,14 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_Encoder_h__
#define __nFRC_2016_16_1_0_Encoder_h__
#ifndef __nFRC_2017_17_0_2_Encoder_h__
#define __nFRC_2017_17_0_2_Encoder_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
class tEncoder
@@ -196,4 +196,4 @@ private:
}
}
#endif // __nFRC_2016_16_1_0_Encoder_h__
#endif // __nFRC_2017_17_0_2_Encoder_h__

View File

@@ -1,14 +1,14 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_Global_h__
#define __nFRC_2016_16_1_0_Global_h__
#ifndef __nFRC_2017_17_0_2_Global_h__
#define __nFRC_2017_17_0_2_Global_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
class tGlobal
@@ -29,7 +29,6 @@ public:
union{
struct{
#ifdef __vxworks
unsigned Radio : 8;
unsigned Comm : 8;
unsigned Mode : 8;
unsigned RSL : 1;
@@ -37,11 +36,10 @@ public:
unsigned RSL : 1;
unsigned Mode : 8;
unsigned Comm : 8;
unsigned Radio : 8;
#endif
};
struct{
unsigned value : 25;
unsigned value : 17;
};
} tLEDs;
@@ -52,12 +50,10 @@ public:
} tLEDs_IfaceConstants;
virtual void writeLEDs(tLEDs value, tRioStatusCode *status) = 0;
virtual void writeLEDs_Radio(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeLEDs_Comm(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeLEDs_Mode(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeLEDs_RSL(bool value, tRioStatusCode *status) = 0;
virtual tLEDs readLEDs(tRioStatusCode *status) = 0;
virtual unsigned char readLEDs_Radio(tRioStatusCode *status) = 0;
virtual unsigned char readLEDs_Comm(tRioStatusCode *status) = 0;
virtual unsigned char readLEDs_Mode(tRioStatusCode *status) = 0;
virtual bool readLEDs_RSL(tRioStatusCode *status) = 0;
@@ -101,4 +97,4 @@ private:
}
}
#endif // __nFRC_2016_16_1_0_Global_h__
#endif // __nFRC_2017_17_0_2_Global_h__

View File

@@ -1,14 +1,14 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_Interrupt_h__
#define __nFRC_2016_16_1_0_Interrupt_h__
#ifndef __nFRC_2017_17_0_2_Interrupt_h__
#define __nFRC_2017_17_0_2_Interrupt_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
class tInterrupt
@@ -97,4 +97,4 @@ private:
}
}
#endif // __nFRC_2016_16_1_0_Interrupt_h__
#endif // __nFRC_2017_17_0_2_Interrupt_h__

View File

@@ -1,14 +1,14 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_PWM_h__
#define __nFRC_2016_16_1_0_PWM_h__
#ifndef __nFRC_2017_17_0_2_PWM_h__
#define __nFRC_2017_17_0_2_PWM_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
class tPWM
@@ -117,4 +117,4 @@ private:
}
}
#endif // __nFRC_2016_16_1_0_PWM_h__
#endif // __nFRC_2017_17_0_2_PWM_h__

View File

@@ -1,14 +1,14 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_Power_h__
#define __nFRC_2016_16_1_0_Power_h__
#ifndef __nFRC_2017_17_0_2_Power_h__
#define __nFRC_2017_17_0_2_Power_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
class tPower
@@ -217,4 +217,4 @@ private:
}
}
#endif // __nFRC_2016_16_1_0_Power_h__
#endif // __nFRC_2017_17_0_2_Power_h__

View File

@@ -1,14 +1,14 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_Relay_h__
#define __nFRC_2016_16_1_0_Relay_h__
#ifndef __nFRC_2017_17_0_2_Relay_h__
#define __nFRC_2017_17_0_2_Relay_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
class tRelay
@@ -65,4 +65,4 @@ private:
}
}
#endif // __nFRC_2016_16_1_0_Relay_h__
#endif // __nFRC_2017_17_0_2_Relay_h__

View File

@@ -1,14 +1,14 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_SPI_h__
#define __nFRC_2016_16_1_0_SPI_h__
#ifndef __nFRC_2017_17_0_2_SPI_h__
#define __nFRC_2017_17_0_2_SPI_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
class tSPI
@@ -43,6 +43,14 @@ public:
typedef enum
{
} tEnableDIO_IfaceConstants;
virtual void writeEnableDIO(unsigned char value, tRioStatusCode *status) = 0;
virtual unsigned char readEnableDIO(tRioStatusCode *status) = 0;
typedef enum
{
} tChipSelectActiveHigh_IfaceConstants;
@@ -65,4 +73,4 @@ private:
}
}
#endif // __nFRC_2016_16_1_0_SPI_h__
#endif // __nFRC_2017_17_0_2_SPI_h__

View File

@@ -1,14 +1,14 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2016_16_1_0_SysWatchdog_h__
#define __nFRC_2016_16_1_0_SysWatchdog_h__
#ifndef __nFRC_2017_17_0_2_SysWatchdog_h__
#define __nFRC_2017_17_0_2_SysWatchdog_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2016_16_1_0
namespace nFRC_2017_17_0_2
{
class tSysWatchdog
@@ -105,4 +105,4 @@ private:
}
}
#endif // __nFRC_2016_16_1_0_SysWatchdog_h__
#endif // __nFRC_2017_17_0_2_SysWatchdog_h__

View File

@@ -1,15 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2012_1_6_4_nInterfaceGlobals_h__
#define __nFRC_2012_1_6_4_nInterfaceGlobals_h__
namespace nFPGA
{
namespace nFRC_2012_1_6_4
{
extern unsigned int g_currentTargetClass;
}
}
#endif // __nFRC_2012_1_6_4_nInterfaceGlobals_h__

View File

@@ -1,149 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2012_1_6_4_AI_h__
#define __nFRC_2012_1_6_4_AI_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2012_1_6_4
{
class tAI
{
public:
tAI(){}
virtual ~tAI(){}
virtual tSystemInterface* getSystemInterface() = 0;
static tAI* create(unsigned char sys_index, tRioStatusCode *status);
virtual unsigned char getSystemIndex() = 0;
typedef enum
{
kNumSystems = 2,
} tIfaceConstants;
typedef
union{
struct{
#ifdef __vxworks
unsigned Channel : 3;
unsigned Module : 1;
unsigned Averaged : 1;
#else
unsigned Averaged : 1;
unsigned Module : 1;
unsigned Channel : 3;
#endif
};
struct{
unsigned value : 5;
};
} tReadSelect;
typedef
union{
struct{
#ifdef __vxworks
unsigned ScanSize : 3;
unsigned ConvertRate : 26;
#else
unsigned ConvertRate : 26;
unsigned ScanSize : 3;
#endif
};
struct{
unsigned value : 29;
};
} tConfig;
typedef enum
{
} tConfig_IfaceConstants;
virtual void writeConfig(tConfig value, tRioStatusCode *status) = 0;
virtual void writeConfig_ScanSize(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeConfig_ConvertRate(unsigned int value, tRioStatusCode *status) = 0;
virtual tConfig readConfig(tRioStatusCode *status) = 0;
virtual unsigned char readConfig_ScanSize(tRioStatusCode *status) = 0;
virtual unsigned int readConfig_ConvertRate(tRioStatusCode *status) = 0;
typedef enum
{
} tLoopTiming_IfaceConstants;
virtual unsigned int readLoopTiming(tRioStatusCode *status) = 0;
typedef enum
{
kNumOversampleBitsElements = 8,
} tOversampleBits_IfaceConstants;
virtual void writeOversampleBits(unsigned char bitfield_index, unsigned char value, tRioStatusCode *status) = 0;
virtual unsigned char readOversampleBits(unsigned char bitfield_index, tRioStatusCode *status) = 0;
typedef enum
{
kNumAverageBitsElements = 8,
} tAverageBits_IfaceConstants;
virtual void writeAverageBits(unsigned char bitfield_index, unsigned char value, tRioStatusCode *status) = 0;
virtual unsigned char readAverageBits(unsigned char bitfield_index, tRioStatusCode *status) = 0;
typedef enum
{
kNumScanListElements = 8,
} tScanList_IfaceConstants;
virtual void writeScanList(unsigned char bitfield_index, unsigned char value, tRioStatusCode *status) = 0;
virtual unsigned char readScanList(unsigned char bitfield_index, tRioStatusCode *status) = 0;
typedef enum
{
} tOutput_IfaceConstants;
virtual signed int readOutput(tRioStatusCode *status) = 0;
typedef enum
{
} tLatchOutput_IfaceConstants;
virtual void strobeLatchOutput(tRioStatusCode *status) = 0;
typedef enum
{
} tReadSelect_IfaceConstants;
virtual void writeReadSelect(tReadSelect value, tRioStatusCode *status) = 0;
virtual void writeReadSelect_Channel(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeReadSelect_Module(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeReadSelect_Averaged(bool value, tRioStatusCode *status) = 0;
virtual tReadSelect readReadSelect(tRioStatusCode *status) = 0;
virtual unsigned char readReadSelect_Channel(tRioStatusCode *status) = 0;
virtual unsigned char readReadSelect_Module(tRioStatusCode *status) = 0;
virtual bool readReadSelect_Averaged(tRioStatusCode *status) = 0;
private:
tAI(const tAI&);
void operator=(const tAI&);
};
}
}
#endif // __nFRC_2012_1_6_4_AI_h__

View File

@@ -1,87 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2012_1_6_4_Accumulator_h__
#define __nFRC_2012_1_6_4_Accumulator_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2012_1_6_4
{
class tAccumulator
{
public:
tAccumulator(){}
virtual ~tAccumulator(){}
virtual tSystemInterface* getSystemInterface() = 0;
static tAccumulator* create(unsigned char sys_index, tRioStatusCode *status);
virtual unsigned char getSystemIndex() = 0;
typedef enum
{
kNumSystems = 2,
} tIfaceConstants;
typedef
union{
struct{
signed long long Value;
unsigned Count : 32;
};
struct{
unsigned value : 32;
unsigned value2 : 32;
unsigned value3 : 32;
};
} tOutput;
typedef enum
{
} tOutput_IfaceConstants;
virtual tOutput readOutput(tRioStatusCode *status) = 0;
virtual signed long long readOutput_Value(tRioStatusCode *status) = 0;
virtual unsigned int readOutput_Count(tRioStatusCode *status) = 0;
typedef enum
{
} tCenter_IfaceConstants;
virtual void writeCenter(signed int value, tRioStatusCode *status) = 0;
virtual signed int readCenter(tRioStatusCode *status) = 0;
typedef enum
{
} tDeadband_IfaceConstants;
virtual void writeDeadband(signed int value, tRioStatusCode *status) = 0;
virtual signed int readDeadband(tRioStatusCode *status) = 0;
typedef enum
{
} tReset_IfaceConstants;
virtual void strobeReset(tRioStatusCode *status) = 0;
private:
tAccumulator(const tAccumulator&);
void operator=(const tAccumulator&);
};
}
}
#endif // __nFRC_2012_1_6_4_Accumulator_h__

View File

@@ -1,57 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2012_1_6_4_Alarm_h__
#define __nFRC_2012_1_6_4_Alarm_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2012_1_6_4
{
class tAlarm
{
public:
tAlarm(){}
virtual ~tAlarm(){}
virtual tSystemInterface* getSystemInterface() = 0;
static tAlarm* create(tRioStatusCode *status);
typedef enum
{
kNumSystems = 1,
} tIfaceConstants;
typedef enum
{
} tEnable_IfaceConstants;
virtual void writeEnable(bool value, tRioStatusCode *status) = 0;
virtual bool readEnable(tRioStatusCode *status) = 0;
typedef enum
{
} tTriggerTime_IfaceConstants;
virtual void writeTriggerTime(unsigned int value, tRioStatusCode *status) = 0;
virtual unsigned int readTriggerTime(tRioStatusCode *status) = 0;
private:
tAlarm(const tAlarm&);
void operator=(const tAlarm&);
};
}
}
#endif // __nFRC_2012_1_6_4_Alarm_h__

View File

@@ -1,133 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2012_1_6_4_AnalogTrigger_h__
#define __nFRC_2012_1_6_4_AnalogTrigger_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2012_1_6_4
{
class tAnalogTrigger
{
public:
tAnalogTrigger(){}
virtual ~tAnalogTrigger(){}
virtual tSystemInterface* getSystemInterface() = 0;
static tAnalogTrigger* create(unsigned char sys_index, tRioStatusCode *status);
virtual unsigned char getSystemIndex() = 0;
typedef enum
{
kNumSystems = 8,
} tIfaceConstants;
typedef
union{
struct{
#ifdef __vxworks
unsigned InHysteresis : 1;
unsigned OverLimit : 1;
unsigned Rising : 1;
unsigned Falling : 1;
#else
unsigned Falling : 1;
unsigned Rising : 1;
unsigned OverLimit : 1;
unsigned InHysteresis : 1;
#endif
};
struct{
unsigned value : 4;
};
} tOutput;
typedef
union{
struct{
#ifdef __vxworks
unsigned Channel : 3;
unsigned Module : 1;
unsigned Averaged : 1;
unsigned Filter : 1;
unsigned FloatingRollover : 1;
signed RolloverLimit : 8;
#else
signed RolloverLimit : 8;
unsigned FloatingRollover : 1;
unsigned Filter : 1;
unsigned Averaged : 1;
unsigned Module : 1;
unsigned Channel : 3;
#endif
};
struct{
unsigned value : 15;
};
} tSourceSelect;
typedef enum
{
} tSourceSelect_IfaceConstants;
virtual void writeSourceSelect(tSourceSelect value, tRioStatusCode *status) = 0;
virtual void writeSourceSelect_Channel(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeSourceSelect_Module(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeSourceSelect_Averaged(bool value, tRioStatusCode *status) = 0;
virtual void writeSourceSelect_Filter(bool value, tRioStatusCode *status) = 0;
virtual void writeSourceSelect_FloatingRollover(bool value, tRioStatusCode *status) = 0;
virtual void writeSourceSelect_RolloverLimit(signed short value, tRioStatusCode *status) = 0;
virtual tSourceSelect readSourceSelect(tRioStatusCode *status) = 0;
virtual unsigned char readSourceSelect_Channel(tRioStatusCode *status) = 0;
virtual unsigned char readSourceSelect_Module(tRioStatusCode *status) = 0;
virtual bool readSourceSelect_Averaged(tRioStatusCode *status) = 0;
virtual bool readSourceSelect_Filter(tRioStatusCode *status) = 0;
virtual bool readSourceSelect_FloatingRollover(tRioStatusCode *status) = 0;
virtual signed short readSourceSelect_RolloverLimit(tRioStatusCode *status) = 0;
typedef enum
{
} tUpperLimit_IfaceConstants;
virtual void writeUpperLimit(signed int value, tRioStatusCode *status) = 0;
virtual signed int readUpperLimit(tRioStatusCode *status) = 0;
typedef enum
{
} tLowerLimit_IfaceConstants;
virtual void writeLowerLimit(signed int value, tRioStatusCode *status) = 0;
virtual signed int readLowerLimit(tRioStatusCode *status) = 0;
typedef enum
{
kNumOutputElements = 8,
} tOutput_IfaceConstants;
virtual tOutput readOutput(unsigned char bitfield_index, tRioStatusCode *status) = 0;
virtual bool readOutput_InHysteresis(unsigned char bitfield_index, tRioStatusCode *status) = 0;
virtual bool readOutput_OverLimit(unsigned char bitfield_index, tRioStatusCode *status) = 0;
virtual bool readOutput_Rising(unsigned char bitfield_index, tRioStatusCode *status) = 0;
virtual bool readOutput_Falling(unsigned char bitfield_index, tRioStatusCode *status) = 0;
private:
tAnalogTrigger(const tAnalogTrigger&);
void operator=(const tAnalogTrigger&);
};
}
}
#endif // __nFRC_2012_1_6_4_AnalogTrigger_h__

View File

@@ -1,219 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2012_1_6_4_Counter_h__
#define __nFRC_2012_1_6_4_Counter_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2012_1_6_4
{
class tCounter
{
public:
tCounter(){}
virtual ~tCounter(){}
virtual tSystemInterface* getSystemInterface() = 0;
static tCounter* create(unsigned char sys_index, tRioStatusCode *status);
virtual unsigned char getSystemIndex() = 0;
typedef enum
{
kNumSystems = 8,
} tIfaceConstants;
typedef
union{
struct{
#ifdef __vxworks
unsigned Direction : 1;
signed Value : 31;
#else
signed Value : 31;
unsigned Direction : 1;
#endif
};
struct{
unsigned value : 32;
};
} tOutput;
typedef
union{
struct{
#ifdef __vxworks
unsigned UpSource_Channel : 4;
unsigned UpSource_Module : 1;
unsigned UpSource_AnalogTrigger : 1;
unsigned DownSource_Channel : 4;
unsigned DownSource_Module : 1;
unsigned DownSource_AnalogTrigger : 1;
unsigned IndexSource_Channel : 4;
unsigned IndexSource_Module : 1;
unsigned IndexSource_AnalogTrigger : 1;
unsigned IndexActiveHigh : 1;
unsigned UpRisingEdge : 1;
unsigned UpFallingEdge : 1;
unsigned DownRisingEdge : 1;
unsigned DownFallingEdge : 1;
unsigned Mode : 2;
unsigned PulseLengthThreshold : 6;
unsigned Enable : 1;
#else
unsigned Enable : 1;
unsigned PulseLengthThreshold : 6;
unsigned Mode : 2;
unsigned DownFallingEdge : 1;
unsigned DownRisingEdge : 1;
unsigned UpFallingEdge : 1;
unsigned UpRisingEdge : 1;
unsigned IndexActiveHigh : 1;
unsigned IndexSource_AnalogTrigger : 1;
unsigned IndexSource_Module : 1;
unsigned IndexSource_Channel : 4;
unsigned DownSource_AnalogTrigger : 1;
unsigned DownSource_Module : 1;
unsigned DownSource_Channel : 4;
unsigned UpSource_AnalogTrigger : 1;
unsigned UpSource_Module : 1;
unsigned UpSource_Channel : 4;
#endif
};
struct{
unsigned value : 32;
};
} tConfig;
typedef
union{
struct{
#ifdef __vxworks
unsigned Period : 23;
signed Count : 8;
unsigned Stalled : 1;
#else
unsigned Stalled : 1;
signed Count : 8;
unsigned Period : 23;
#endif
};
struct{
unsigned value : 32;
};
} tTimerOutput;
typedef
union{
struct{
#ifdef __vxworks
unsigned StallPeriod : 24;
unsigned AverageSize : 7;
unsigned UpdateWhenEmpty : 1;
#else
unsigned UpdateWhenEmpty : 1;
unsigned AverageSize : 7;
unsigned StallPeriod : 24;
#endif
};
struct{
unsigned value : 32;
};
} tTimerConfig;
typedef enum
{
} tOutput_IfaceConstants;
virtual tOutput readOutput(tRioStatusCode *status) = 0;
virtual bool readOutput_Direction(tRioStatusCode *status) = 0;
virtual signed int readOutput_Value(tRioStatusCode *status) = 0;
typedef enum
{
} tConfig_IfaceConstants;
virtual void writeConfig(tConfig value, tRioStatusCode *status) = 0;
virtual void writeConfig_UpSource_Channel(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeConfig_UpSource_Module(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeConfig_UpSource_AnalogTrigger(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_DownSource_Channel(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeConfig_DownSource_Module(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeConfig_DownSource_AnalogTrigger(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_IndexSource_Channel(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeConfig_IndexSource_Module(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeConfig_IndexSource_AnalogTrigger(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_IndexActiveHigh(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_UpRisingEdge(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_UpFallingEdge(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_DownRisingEdge(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_DownFallingEdge(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Mode(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeConfig_PulseLengthThreshold(unsigned short value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable(bool value, tRioStatusCode *status) = 0;
virtual tConfig readConfig(tRioStatusCode *status) = 0;
virtual unsigned char readConfig_UpSource_Channel(tRioStatusCode *status) = 0;
virtual unsigned char readConfig_UpSource_Module(tRioStatusCode *status) = 0;
virtual bool readConfig_UpSource_AnalogTrigger(tRioStatusCode *status) = 0;
virtual unsigned char readConfig_DownSource_Channel(tRioStatusCode *status) = 0;
virtual unsigned char readConfig_DownSource_Module(tRioStatusCode *status) = 0;
virtual bool readConfig_DownSource_AnalogTrigger(tRioStatusCode *status) = 0;
virtual unsigned char readConfig_IndexSource_Channel(tRioStatusCode *status) = 0;
virtual unsigned char readConfig_IndexSource_Module(tRioStatusCode *status) = 0;
virtual bool readConfig_IndexSource_AnalogTrigger(tRioStatusCode *status) = 0;
virtual bool readConfig_IndexActiveHigh(tRioStatusCode *status) = 0;
virtual bool readConfig_UpRisingEdge(tRioStatusCode *status) = 0;
virtual bool readConfig_UpFallingEdge(tRioStatusCode *status) = 0;
virtual bool readConfig_DownRisingEdge(tRioStatusCode *status) = 0;
virtual bool readConfig_DownFallingEdge(tRioStatusCode *status) = 0;
virtual unsigned char readConfig_Mode(tRioStatusCode *status) = 0;
virtual unsigned short readConfig_PulseLengthThreshold(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable(tRioStatusCode *status) = 0;
typedef enum
{
} tTimerOutput_IfaceConstants;
virtual tTimerOutput readTimerOutput(tRioStatusCode *status) = 0;
virtual unsigned int readTimerOutput_Period(tRioStatusCode *status) = 0;
virtual signed char readTimerOutput_Count(tRioStatusCode *status) = 0;
virtual bool readTimerOutput_Stalled(tRioStatusCode *status) = 0;
typedef enum
{
} tReset_IfaceConstants;
virtual void strobeReset(tRioStatusCode *status) = 0;
typedef enum
{
} tTimerConfig_IfaceConstants;
virtual void writeTimerConfig(tTimerConfig value, tRioStatusCode *status) = 0;
virtual void writeTimerConfig_StallPeriod(unsigned int value, tRioStatusCode *status) = 0;
virtual void writeTimerConfig_AverageSize(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeTimerConfig_UpdateWhenEmpty(bool value, tRioStatusCode *status) = 0;
virtual tTimerConfig readTimerConfig(tRioStatusCode *status) = 0;
virtual unsigned int readTimerConfig_StallPeriod(tRioStatusCode *status) = 0;
virtual unsigned char readTimerConfig_AverageSize(tRioStatusCode *status) = 0;
virtual bool readTimerConfig_UpdateWhenEmpty(tRioStatusCode *status) = 0;
private:
tCounter(const tCounter&);
void operator=(const tCounter&);
};
}
}
#endif // __nFRC_2012_1_6_4_Counter_h__

View File

@@ -1,330 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2012_1_6_4_DIO_h__
#define __nFRC_2012_1_6_4_DIO_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2012_1_6_4
{
class tDIO
{
public:
tDIO(){}
virtual ~tDIO(){}
virtual tSystemInterface* getSystemInterface() = 0;
static tDIO* create(unsigned char sys_index, tRioStatusCode *status);
virtual unsigned char getSystemIndex() = 0;
typedef enum
{
kNumSystems = 2,
} tIfaceConstants;
typedef
union{
struct{
#ifdef __vxworks
unsigned Period : 16;
unsigned MinHigh : 16;
#else
unsigned MinHigh : 16;
unsigned Period : 16;
#endif
};
struct{
unsigned value : 32;
};
} tPWMConfig;
typedef
union{
struct{
#ifdef __vxworks
unsigned RelayFwd : 8;
unsigned RelayRev : 8;
unsigned I2CHeader : 4;
#else
unsigned I2CHeader : 4;
unsigned RelayRev : 8;
unsigned RelayFwd : 8;
#endif
};
struct{
unsigned value : 20;
};
} tSlowValue;
typedef
union{
struct{
#ifdef __vxworks
unsigned Transaction : 1;
unsigned Done : 1;
unsigned Aborted : 1;
unsigned DataReceivedHigh : 24;
#else
unsigned DataReceivedHigh : 24;
unsigned Aborted : 1;
unsigned Done : 1;
unsigned Transaction : 1;
#endif
};
struct{
unsigned value : 27;
};
} tI2CStatus;
typedef
union{
struct{
#ifdef __vxworks
unsigned Address : 8;
unsigned BytesToRead : 3;
unsigned BytesToWrite : 3;
unsigned DataToSendHigh : 16;
unsigned BitwiseHandshake : 1;
#else
unsigned BitwiseHandshake : 1;
unsigned DataToSendHigh : 16;
unsigned BytesToWrite : 3;
unsigned BytesToRead : 3;
unsigned Address : 8;
#endif
};
struct{
unsigned value : 31;
};
} tI2CConfig;
typedef
union{
struct{
#ifdef __vxworks
unsigned PeriodPower : 4;
unsigned OutputSelect_0 : 4;
unsigned OutputSelect_1 : 4;
unsigned OutputSelect_2 : 4;
unsigned OutputSelect_3 : 4;
#else
unsigned OutputSelect_3 : 4;
unsigned OutputSelect_2 : 4;
unsigned OutputSelect_1 : 4;
unsigned OutputSelect_0 : 4;
unsigned PeriodPower : 4;
#endif
};
struct{
unsigned value : 20;
};
} tDO_PWMConfig;
typedef enum
{
kNumFilterSelectElements = 16,
} tFilterSelect_IfaceConstants;
virtual void writeFilterSelect(unsigned char bitfield_index, unsigned char value, tRioStatusCode *status) = 0;
virtual unsigned char readFilterSelect(unsigned char bitfield_index, tRioStatusCode *status) = 0;
typedef enum
{
} tI2CDataToSend_IfaceConstants;
virtual void writeI2CDataToSend(unsigned int value, tRioStatusCode *status) = 0;
virtual unsigned int readI2CDataToSend(tRioStatusCode *status) = 0;
typedef enum
{
} tDO_IfaceConstants;
virtual void writeDO(unsigned short value, tRioStatusCode *status) = 0;
virtual unsigned short readDO(tRioStatusCode *status) = 0;
typedef enum
{
kNumFilterPeriodElements = 3,
} tFilterPeriod_IfaceConstants;
virtual void writeFilterPeriod(unsigned char bitfield_index, unsigned char value, tRioStatusCode *status) = 0;
virtual unsigned char readFilterPeriod(unsigned char bitfield_index, tRioStatusCode *status) = 0;
typedef enum
{
} tOutputEnable_IfaceConstants;
virtual void writeOutputEnable(unsigned short value, tRioStatusCode *status) = 0;
virtual unsigned short readOutputEnable(tRioStatusCode *status) = 0;
typedef enum
{
} tPulse_IfaceConstants;
virtual void writePulse(unsigned short value, tRioStatusCode *status) = 0;
virtual unsigned short readPulse(tRioStatusCode *status) = 0;
typedef enum
{
} tSlowValue_IfaceConstants;
virtual void writeSlowValue(tSlowValue value, tRioStatusCode *status) = 0;
virtual void writeSlowValue_RelayFwd(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeSlowValue_RelayRev(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeSlowValue_I2CHeader(unsigned char value, tRioStatusCode *status) = 0;
virtual tSlowValue readSlowValue(tRioStatusCode *status) = 0;
virtual unsigned char readSlowValue_RelayFwd(tRioStatusCode *status) = 0;
virtual unsigned char readSlowValue_RelayRev(tRioStatusCode *status) = 0;
virtual unsigned char readSlowValue_I2CHeader(tRioStatusCode *status) = 0;
typedef enum
{
} tI2CStatus_IfaceConstants;
virtual tI2CStatus readI2CStatus(tRioStatusCode *status) = 0;
virtual unsigned char readI2CStatus_Transaction(tRioStatusCode *status) = 0;
virtual bool readI2CStatus_Done(tRioStatusCode *status) = 0;
virtual bool readI2CStatus_Aborted(tRioStatusCode *status) = 0;
virtual unsigned int readI2CStatus_DataReceivedHigh(tRioStatusCode *status) = 0;
typedef enum
{
} tI2CDataReceived_IfaceConstants;
virtual unsigned int readI2CDataReceived(tRioStatusCode *status) = 0;
typedef enum
{
} tDI_IfaceConstants;
virtual unsigned short readDI(tRioStatusCode *status) = 0;
typedef enum
{
} tPulseLength_IfaceConstants;
virtual void writePulseLength(unsigned char value, tRioStatusCode *status) = 0;
virtual unsigned char readPulseLength(tRioStatusCode *status) = 0;
typedef enum
{
kNumPWMPeriodScaleElements = 10,
} tPWMPeriodScale_IfaceConstants;
virtual void writePWMPeriodScale(unsigned char bitfield_index, unsigned char value, tRioStatusCode *status) = 0;
virtual unsigned char readPWMPeriodScale(unsigned char bitfield_index, tRioStatusCode *status) = 0;
typedef enum
{
kNumDO_PWMDutyCycleElements = 4,
} tDO_PWMDutyCycle_IfaceConstants;
virtual void writeDO_PWMDutyCycle(unsigned char bitfield_index, unsigned char value, tRioStatusCode *status) = 0;
virtual unsigned char readDO_PWMDutyCycle(unsigned char bitfield_index, tRioStatusCode *status) = 0;
typedef enum
{
} tBFL_IfaceConstants;
virtual void writeBFL(bool value, tRioStatusCode *status) = 0;
virtual bool readBFL(tRioStatusCode *status) = 0;
typedef enum
{
} tI2CConfig_IfaceConstants;
virtual void writeI2CConfig(tI2CConfig value, tRioStatusCode *status) = 0;
virtual void writeI2CConfig_Address(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeI2CConfig_BytesToRead(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeI2CConfig_BytesToWrite(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeI2CConfig_DataToSendHigh(unsigned short value, tRioStatusCode *status) = 0;
virtual void writeI2CConfig_BitwiseHandshake(bool value, tRioStatusCode *status) = 0;
virtual tI2CConfig readI2CConfig(tRioStatusCode *status) = 0;
virtual unsigned char readI2CConfig_Address(tRioStatusCode *status) = 0;
virtual unsigned char readI2CConfig_BytesToRead(tRioStatusCode *status) = 0;
virtual unsigned char readI2CConfig_BytesToWrite(tRioStatusCode *status) = 0;
virtual unsigned short readI2CConfig_DataToSendHigh(tRioStatusCode *status) = 0;
virtual bool readI2CConfig_BitwiseHandshake(tRioStatusCode *status) = 0;
typedef enum
{
} tDO_PWMConfig_IfaceConstants;
virtual void writeDO_PWMConfig(tDO_PWMConfig value, tRioStatusCode *status) = 0;
virtual void writeDO_PWMConfig_PeriodPower(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeDO_PWMConfig_OutputSelect_0(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeDO_PWMConfig_OutputSelect_1(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeDO_PWMConfig_OutputSelect_2(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeDO_PWMConfig_OutputSelect_3(unsigned char value, tRioStatusCode *status) = 0;
virtual tDO_PWMConfig readDO_PWMConfig(tRioStatusCode *status) = 0;
virtual unsigned char readDO_PWMConfig_PeriodPower(tRioStatusCode *status) = 0;
virtual unsigned char readDO_PWMConfig_OutputSelect_0(tRioStatusCode *status) = 0;
virtual unsigned char readDO_PWMConfig_OutputSelect_1(tRioStatusCode *status) = 0;
virtual unsigned char readDO_PWMConfig_OutputSelect_2(tRioStatusCode *status) = 0;
virtual unsigned char readDO_PWMConfig_OutputSelect_3(tRioStatusCode *status) = 0;
typedef enum
{
} tI2CStart_IfaceConstants;
virtual void strobeI2CStart(tRioStatusCode *status) = 0;
typedef enum
{
} tLoopTiming_IfaceConstants;
virtual unsigned short readLoopTiming(tRioStatusCode *status) = 0;
typedef enum
{
} tPWMConfig_IfaceConstants;
virtual void writePWMConfig(tPWMConfig value, tRioStatusCode *status) = 0;
virtual void writePWMConfig_Period(unsigned short value, tRioStatusCode *status) = 0;
virtual void writePWMConfig_MinHigh(unsigned short value, tRioStatusCode *status) = 0;
virtual tPWMConfig readPWMConfig(tRioStatusCode *status) = 0;
virtual unsigned short readPWMConfig_Period(tRioStatusCode *status) = 0;
virtual unsigned short readPWMConfig_MinHigh(tRioStatusCode *status) = 0;
typedef enum
{
kNumPWMValueRegisters = 10,
} tPWMValue_IfaceConstants;
virtual void writePWMValue(unsigned char reg_index, unsigned char value, tRioStatusCode *status) = 0;
virtual unsigned char readPWMValue(unsigned char reg_index, tRioStatusCode *status) = 0;
private:
tDIO(const tDIO&);
void operator=(const tDIO&);
};
}
}
#endif // __nFRC_2012_1_6_4_DIO_h__

View File

@@ -1,188 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2012_1_6_4_DMA_h__
#define __nFRC_2012_1_6_4_DMA_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2012_1_6_4
{
class tDMA
{
public:
tDMA(){}
virtual ~tDMA(){}
virtual tSystemInterface* getSystemInterface() = 0;
static tDMA* create(tRioStatusCode *status);
typedef enum
{
kNumSystems = 1,
} tIfaceConstants;
typedef
union{
struct{
#ifdef __vxworks
unsigned Pause : 1;
unsigned Enable_AI0_Low : 1;
unsigned Enable_AI0_High : 1;
unsigned Enable_AIAveraged0_Low : 1;
unsigned Enable_AIAveraged0_High : 1;
unsigned Enable_AI1_Low : 1;
unsigned Enable_AI1_High : 1;
unsigned Enable_AIAveraged1_Low : 1;
unsigned Enable_AIAveraged1_High : 1;
unsigned Enable_Accumulator0 : 1;
unsigned Enable_Accumulator1 : 1;
unsigned Enable_DI : 1;
unsigned Enable_AnalogTriggers : 1;
unsigned Enable_Counters_Low : 1;
unsigned Enable_Counters_High : 1;
unsigned Enable_CounterTimers_Low : 1;
unsigned Enable_CounterTimers_High : 1;
unsigned Enable_Encoders : 1;
unsigned Enable_EncoderTimers : 1;
unsigned ExternalClock : 1;
#else
unsigned ExternalClock : 1;
unsigned Enable_EncoderTimers : 1;
unsigned Enable_Encoders : 1;
unsigned Enable_CounterTimers_High : 1;
unsigned Enable_CounterTimers_Low : 1;
unsigned Enable_Counters_High : 1;
unsigned Enable_Counters_Low : 1;
unsigned Enable_AnalogTriggers : 1;
unsigned Enable_DI : 1;
unsigned Enable_Accumulator1 : 1;
unsigned Enable_Accumulator0 : 1;
unsigned Enable_AIAveraged1_High : 1;
unsigned Enable_AIAveraged1_Low : 1;
unsigned Enable_AI1_High : 1;
unsigned Enable_AI1_Low : 1;
unsigned Enable_AIAveraged0_High : 1;
unsigned Enable_AIAveraged0_Low : 1;
unsigned Enable_AI0_High : 1;
unsigned Enable_AI0_Low : 1;
unsigned Pause : 1;
#endif
};
struct{
unsigned value : 20;
};
} tConfig;
typedef
union{
struct{
#ifdef __vxworks
unsigned ExternalClockSource_Channel : 4;
unsigned ExternalClockSource_Module : 1;
unsigned ExternalClockSource_AnalogTrigger : 1;
unsigned RisingEdge : 1;
unsigned FallingEdge : 1;
#else
unsigned FallingEdge : 1;
unsigned RisingEdge : 1;
unsigned ExternalClockSource_AnalogTrigger : 1;
unsigned ExternalClockSource_Module : 1;
unsigned ExternalClockSource_Channel : 4;
#endif
};
struct{
unsigned value : 8;
};
} tExternalTriggers;
typedef enum
{
} tRate_IfaceConstants;
virtual void writeRate(unsigned int value, tRioStatusCode *status) = 0;
virtual unsigned int readRate(tRioStatusCode *status) = 0;
typedef enum
{
} tConfig_IfaceConstants;
virtual void writeConfig(tConfig value, tRioStatusCode *status) = 0;
virtual void writeConfig_Pause(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable_AI0_Low(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable_AI0_High(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable_AIAveraged0_Low(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable_AIAveraged0_High(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable_AI1_Low(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable_AI1_High(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable_AIAveraged1_Low(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable_AIAveraged1_High(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable_Accumulator0(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable_Accumulator1(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable_DI(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable_AnalogTriggers(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable_Counters_Low(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable_Counters_High(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable_CounterTimers_Low(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable_CounterTimers_High(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable_Encoders(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable_EncoderTimers(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_ExternalClock(bool value, tRioStatusCode *status) = 0;
virtual tConfig readConfig(tRioStatusCode *status) = 0;
virtual bool readConfig_Pause(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable_AI0_Low(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable_AI0_High(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable_AIAveraged0_Low(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable_AIAveraged0_High(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable_AI1_Low(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable_AI1_High(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable_AIAveraged1_Low(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable_AIAveraged1_High(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable_Accumulator0(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable_Accumulator1(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable_DI(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable_AnalogTriggers(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable_Counters_Low(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable_Counters_High(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable_CounterTimers_Low(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable_CounterTimers_High(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable_Encoders(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable_EncoderTimers(tRioStatusCode *status) = 0;
virtual bool readConfig_ExternalClock(tRioStatusCode *status) = 0;
typedef enum
{
kNumExternalTriggersElements = 4,
} tExternalTriggers_IfaceConstants;
virtual void writeExternalTriggers(unsigned char bitfield_index, tExternalTriggers value, tRioStatusCode *status) = 0;
virtual void writeExternalTriggers_ExternalClockSource_Channel(unsigned char bitfield_index, unsigned char value, tRioStatusCode *status) = 0;
virtual void writeExternalTriggers_ExternalClockSource_Module(unsigned char bitfield_index, unsigned char value, tRioStatusCode *status) = 0;
virtual void writeExternalTriggers_ExternalClockSource_AnalogTrigger(unsigned char bitfield_index, bool value, tRioStatusCode *status) = 0;
virtual void writeExternalTriggers_RisingEdge(unsigned char bitfield_index, bool value, tRioStatusCode *status) = 0;
virtual void writeExternalTriggers_FallingEdge(unsigned char bitfield_index, bool value, tRioStatusCode *status) = 0;
virtual tExternalTriggers readExternalTriggers(unsigned char bitfield_index, tRioStatusCode *status) = 0;
virtual unsigned char readExternalTriggers_ExternalClockSource_Channel(unsigned char bitfield_index, tRioStatusCode *status) = 0;
virtual unsigned char readExternalTriggers_ExternalClockSource_Module(unsigned char bitfield_index, tRioStatusCode *status) = 0;
virtual bool readExternalTriggers_ExternalClockSource_AnalogTrigger(unsigned char bitfield_index, tRioStatusCode *status) = 0;
virtual bool readExternalTriggers_RisingEdge(unsigned char bitfield_index, tRioStatusCode *status) = 0;
virtual bool readExternalTriggers_FallingEdge(unsigned char bitfield_index, tRioStatusCode *status) = 0;
private:
tDMA(const tDMA&);
void operator=(const tDMA&);
};
}
}
#endif // __nFRC_2012_1_6_4_DMA_h__

View File

@@ -1,199 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2012_1_6_4_Encoder_h__
#define __nFRC_2012_1_6_4_Encoder_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2012_1_6_4
{
class tEncoder
{
public:
tEncoder(){}
virtual ~tEncoder(){}
virtual tSystemInterface* getSystemInterface() = 0;
static tEncoder* create(unsigned char sys_index, tRioStatusCode *status);
virtual unsigned char getSystemIndex() = 0;
typedef enum
{
kNumSystems = 4,
} tIfaceConstants;
typedef
union{
struct{
#ifdef __vxworks
unsigned Direction : 1;
signed Value : 31;
#else
signed Value : 31;
unsigned Direction : 1;
#endif
};
struct{
unsigned value : 32;
};
} tOutput;
typedef
union{
struct{
#ifdef __vxworks
unsigned ASource_Channel : 4;
unsigned ASource_Module : 1;
unsigned ASource_AnalogTrigger : 1;
unsigned BSource_Channel : 4;
unsigned BSource_Module : 1;
unsigned BSource_AnalogTrigger : 1;
unsigned IndexSource_Channel : 4;
unsigned IndexSource_Module : 1;
unsigned IndexSource_AnalogTrigger : 1;
unsigned IndexActiveHigh : 1;
unsigned Reverse : 1;
unsigned Enable : 1;
#else
unsigned Enable : 1;
unsigned Reverse : 1;
unsigned IndexActiveHigh : 1;
unsigned IndexSource_AnalogTrigger : 1;
unsigned IndexSource_Module : 1;
unsigned IndexSource_Channel : 4;
unsigned BSource_AnalogTrigger : 1;
unsigned BSource_Module : 1;
unsigned BSource_Channel : 4;
unsigned ASource_AnalogTrigger : 1;
unsigned ASource_Module : 1;
unsigned ASource_Channel : 4;
#endif
};
struct{
unsigned value : 21;
};
} tConfig;
typedef
union{
struct{
#ifdef __vxworks
unsigned Period : 23;
signed Count : 8;
unsigned Stalled : 1;
#else
unsigned Stalled : 1;
signed Count : 8;
unsigned Period : 23;
#endif
};
struct{
unsigned value : 32;
};
} tTimerOutput;
typedef
union{
struct{
#ifdef __vxworks
unsigned StallPeriod : 24;
unsigned AverageSize : 7;
unsigned UpdateWhenEmpty : 1;
#else
unsigned UpdateWhenEmpty : 1;
unsigned AverageSize : 7;
unsigned StallPeriod : 24;
#endif
};
struct{
unsigned value : 32;
};
} tTimerConfig;
typedef enum
{
} tOutput_IfaceConstants;
virtual tOutput readOutput(tRioStatusCode *status) = 0;
virtual bool readOutput_Direction(tRioStatusCode *status) = 0;
virtual signed int readOutput_Value(tRioStatusCode *status) = 0;
typedef enum
{
} tConfig_IfaceConstants;
virtual void writeConfig(tConfig value, tRioStatusCode *status) = 0;
virtual void writeConfig_ASource_Channel(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeConfig_ASource_Module(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeConfig_ASource_AnalogTrigger(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_BSource_Channel(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeConfig_BSource_Module(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeConfig_BSource_AnalogTrigger(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_IndexSource_Channel(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeConfig_IndexSource_Module(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeConfig_IndexSource_AnalogTrigger(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_IndexActiveHigh(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Reverse(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_Enable(bool value, tRioStatusCode *status) = 0;
virtual tConfig readConfig(tRioStatusCode *status) = 0;
virtual unsigned char readConfig_ASource_Channel(tRioStatusCode *status) = 0;
virtual unsigned char readConfig_ASource_Module(tRioStatusCode *status) = 0;
virtual bool readConfig_ASource_AnalogTrigger(tRioStatusCode *status) = 0;
virtual unsigned char readConfig_BSource_Channel(tRioStatusCode *status) = 0;
virtual unsigned char readConfig_BSource_Module(tRioStatusCode *status) = 0;
virtual bool readConfig_BSource_AnalogTrigger(tRioStatusCode *status) = 0;
virtual unsigned char readConfig_IndexSource_Channel(tRioStatusCode *status) = 0;
virtual unsigned char readConfig_IndexSource_Module(tRioStatusCode *status) = 0;
virtual bool readConfig_IndexSource_AnalogTrigger(tRioStatusCode *status) = 0;
virtual bool readConfig_IndexActiveHigh(tRioStatusCode *status) = 0;
virtual bool readConfig_Reverse(tRioStatusCode *status) = 0;
virtual bool readConfig_Enable(tRioStatusCode *status) = 0;
typedef enum
{
} tTimerOutput_IfaceConstants;
virtual tTimerOutput readTimerOutput(tRioStatusCode *status) = 0;
virtual unsigned int readTimerOutput_Period(tRioStatusCode *status) = 0;
virtual signed char readTimerOutput_Count(tRioStatusCode *status) = 0;
virtual bool readTimerOutput_Stalled(tRioStatusCode *status) = 0;
typedef enum
{
} tReset_IfaceConstants;
virtual void strobeReset(tRioStatusCode *status) = 0;
typedef enum
{
} tTimerConfig_IfaceConstants;
virtual void writeTimerConfig(tTimerConfig value, tRioStatusCode *status) = 0;
virtual void writeTimerConfig_StallPeriod(unsigned int value, tRioStatusCode *status) = 0;
virtual void writeTimerConfig_AverageSize(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeTimerConfig_UpdateWhenEmpty(bool value, tRioStatusCode *status) = 0;
virtual tTimerConfig readTimerConfig(tRioStatusCode *status) = 0;
virtual unsigned int readTimerConfig_StallPeriod(tRioStatusCode *status) = 0;
virtual unsigned char readTimerConfig_AverageSize(tRioStatusCode *status) = 0;
virtual bool readTimerConfig_UpdateWhenEmpty(tRioStatusCode *status) = 0;
private:
tEncoder(const tEncoder&);
void operator=(const tEncoder&);
};
}
}
#endif // __nFRC_2012_1_6_4_Encoder_h__

View File

@@ -1,70 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2012_1_6_4_Global_h__
#define __nFRC_2012_1_6_4_Global_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2012_1_6_4
{
class tGlobal
{
public:
tGlobal(){}
virtual ~tGlobal(){}
virtual tSystemInterface* getSystemInterface() = 0;
static tGlobal* create(tRioStatusCode *status);
typedef enum
{
kNumSystems = 1,
} tIfaceConstants;
typedef enum
{
} tVersion_IfaceConstants;
virtual unsigned short readVersion(tRioStatusCode *status) = 0;
typedef enum
{
} tLocalTime_IfaceConstants;
virtual unsigned int readLocalTime(tRioStatusCode *status) = 0;
typedef enum
{
} tFPGA_LED_IfaceConstants;
virtual void writeFPGA_LED(bool value, tRioStatusCode *status) = 0;
virtual bool readFPGA_LED(tRioStatusCode *status) = 0;
typedef enum
{
} tRevision_IfaceConstants;
virtual unsigned int readRevision(tRioStatusCode *status) = 0;
private:
tGlobal(const tGlobal&);
void operator=(const tGlobal&);
};
}
}
#endif // __nFRC_2012_1_6_4_Global_h__

View File

@@ -1,93 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2012_1_6_4_Interrupt_h__
#define __nFRC_2012_1_6_4_Interrupt_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2012_1_6_4
{
class tInterrupt
{
public:
tInterrupt(){}
virtual ~tInterrupt(){}
virtual tSystemInterface* getSystemInterface() = 0;
static tInterrupt* create(unsigned char sys_index, tRioStatusCode *status);
virtual unsigned char getSystemIndex() = 0;
typedef enum
{
kNumSystems = 8,
} tIfaceConstants;
typedef
union{
struct{
#ifdef __vxworks
unsigned Source_Channel : 4;
unsigned Source_Module : 1;
unsigned Source_AnalogTrigger : 1;
unsigned RisingEdge : 1;
unsigned FallingEdge : 1;
unsigned WaitForAck : 1;
#else
unsigned WaitForAck : 1;
unsigned FallingEdge : 1;
unsigned RisingEdge : 1;
unsigned Source_AnalogTrigger : 1;
unsigned Source_Module : 1;
unsigned Source_Channel : 4;
#endif
};
struct{
unsigned value : 9;
};
} tConfig;
typedef enum
{
} tTimeStamp_IfaceConstants;
virtual unsigned int readTimeStamp(tRioStatusCode *status) = 0;
typedef enum
{
} tConfig_IfaceConstants;
virtual void writeConfig(tConfig value, tRioStatusCode *status) = 0;
virtual void writeConfig_Source_Channel(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeConfig_Source_Module(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeConfig_Source_AnalogTrigger(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_RisingEdge(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_FallingEdge(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_WaitForAck(bool value, tRioStatusCode *status) = 0;
virtual tConfig readConfig(tRioStatusCode *status) = 0;
virtual unsigned char readConfig_Source_Channel(tRioStatusCode *status) = 0;
virtual unsigned char readConfig_Source_Module(tRioStatusCode *status) = 0;
virtual bool readConfig_Source_AnalogTrigger(tRioStatusCode *status) = 0;
virtual bool readConfig_RisingEdge(tRioStatusCode *status) = 0;
virtual bool readConfig_FallingEdge(tRioStatusCode *status) = 0;
virtual bool readConfig_WaitForAck(tRioStatusCode *status) = 0;
private:
tInterrupt(const tInterrupt&);
void operator=(const tInterrupt&);
};
}
}
#endif // __nFRC_2012_1_6_4_Interrupt_h__

View File

@@ -1,228 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2012_1_6_4_SPI_h__
#define __nFRC_2012_1_6_4_SPI_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2012_1_6_4
{
class tSPI
{
public:
tSPI(){}
virtual ~tSPI(){}
virtual tSystemInterface* getSystemInterface() = 0;
static tSPI* create(tRioStatusCode *status);
typedef enum
{
kNumSystems = 1,
} tIfaceConstants;
typedef
union{
struct{
#ifdef __vxworks
unsigned ReceivedDataOverflow : 1;
unsigned Idle : 1;
#else
unsigned Idle : 1;
unsigned ReceivedDataOverflow : 1;
#endif
};
struct{
unsigned value : 2;
};
} tStatus;
typedef
union{
struct{
#ifdef __vxworks
unsigned BusBitWidth : 8;
unsigned ClockHalfPeriodDelay : 8;
unsigned MSBfirst : 1;
unsigned DataOnFalling : 1;
unsigned LatchFirst : 1;
unsigned LatchLast : 1;
unsigned FramePolarity : 1;
unsigned WriteOnly : 1;
unsigned ClockPolarity : 1;
#else
unsigned ClockPolarity : 1;
unsigned WriteOnly : 1;
unsigned FramePolarity : 1;
unsigned LatchLast : 1;
unsigned LatchFirst : 1;
unsigned DataOnFalling : 1;
unsigned MSBfirst : 1;
unsigned ClockHalfPeriodDelay : 8;
unsigned BusBitWidth : 8;
#endif
};
struct{
unsigned value : 23;
};
} tConfig;
typedef
union{
struct{
#ifdef __vxworks
unsigned SCLK_Channel : 4;
unsigned SCLK_Module : 1;
unsigned MOSI_Channel : 4;
unsigned MOSI_Module : 1;
unsigned MISO_Channel : 4;
unsigned MISO_Module : 1;
unsigned SS_Channel : 4;
unsigned SS_Module : 1;
#else
unsigned SS_Module : 1;
unsigned SS_Channel : 4;
unsigned MISO_Module : 1;
unsigned MISO_Channel : 4;
unsigned MOSI_Module : 1;
unsigned MOSI_Channel : 4;
unsigned SCLK_Module : 1;
unsigned SCLK_Channel : 4;
#endif
};
struct{
unsigned value : 20;
};
} tChannels;
typedef enum
{
} tStatus_IfaceConstants;
virtual tStatus readStatus(tRioStatusCode *status) = 0;
virtual bool readStatus_ReceivedDataOverflow(tRioStatusCode *status) = 0;
virtual bool readStatus_Idle(tRioStatusCode *status) = 0;
typedef enum
{
} tReceivedData_IfaceConstants;
virtual unsigned int readReceivedData(tRioStatusCode *status) = 0;
typedef enum
{
} tDataToLoad_IfaceConstants;
virtual void writeDataToLoad(unsigned int value, tRioStatusCode *status) = 0;
virtual unsigned int readDataToLoad(tRioStatusCode *status) = 0;
typedef enum
{
} tConfig_IfaceConstants;
virtual void writeConfig(tConfig value, tRioStatusCode *status) = 0;
virtual void writeConfig_BusBitWidth(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeConfig_ClockHalfPeriodDelay(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeConfig_MSBfirst(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_DataOnFalling(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_LatchFirst(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_LatchLast(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_FramePolarity(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_WriteOnly(bool value, tRioStatusCode *status) = 0;
virtual void writeConfig_ClockPolarity(bool value, tRioStatusCode *status) = 0;
virtual tConfig readConfig(tRioStatusCode *status) = 0;
virtual unsigned char readConfig_BusBitWidth(tRioStatusCode *status) = 0;
virtual unsigned char readConfig_ClockHalfPeriodDelay(tRioStatusCode *status) = 0;
virtual bool readConfig_MSBfirst(tRioStatusCode *status) = 0;
virtual bool readConfig_DataOnFalling(tRioStatusCode *status) = 0;
virtual bool readConfig_LatchFirst(tRioStatusCode *status) = 0;
virtual bool readConfig_LatchLast(tRioStatusCode *status) = 0;
virtual bool readConfig_FramePolarity(tRioStatusCode *status) = 0;
virtual bool readConfig_WriteOnly(tRioStatusCode *status) = 0;
virtual bool readConfig_ClockPolarity(tRioStatusCode *status) = 0;
typedef enum
{
} tClearReceivedData_IfaceConstants;
virtual void strobeClearReceivedData(tRioStatusCode *status) = 0;
typedef enum
{
} tReceivedElements_IfaceConstants;
virtual unsigned short readReceivedElements(tRioStatusCode *status) = 0;
typedef enum
{
} tLoad_IfaceConstants;
virtual void strobeLoad(tRioStatusCode *status) = 0;
typedef enum
{
} tReset_IfaceConstants;
virtual void strobeReset(tRioStatusCode *status) = 0;
typedef enum
{
} tChannels_IfaceConstants;
virtual void writeChannels(tChannels value, tRioStatusCode *status) = 0;
virtual void writeChannels_SCLK_Channel(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeChannels_SCLK_Module(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeChannels_MOSI_Channel(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeChannels_MOSI_Module(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeChannels_MISO_Channel(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeChannels_MISO_Module(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeChannels_SS_Channel(unsigned char value, tRioStatusCode *status) = 0;
virtual void writeChannels_SS_Module(unsigned char value, tRioStatusCode *status) = 0;
virtual tChannels readChannels(tRioStatusCode *status) = 0;
virtual unsigned char readChannels_SCLK_Channel(tRioStatusCode *status) = 0;
virtual unsigned char readChannels_SCLK_Module(tRioStatusCode *status) = 0;
virtual unsigned char readChannels_MOSI_Channel(tRioStatusCode *status) = 0;
virtual unsigned char readChannels_MOSI_Module(tRioStatusCode *status) = 0;
virtual unsigned char readChannels_MISO_Channel(tRioStatusCode *status) = 0;
virtual unsigned char readChannels_MISO_Module(tRioStatusCode *status) = 0;
virtual unsigned char readChannels_SS_Channel(tRioStatusCode *status) = 0;
virtual unsigned char readChannels_SS_Module(tRioStatusCode *status) = 0;
typedef enum
{
} tAvailableToLoad_IfaceConstants;
virtual unsigned short readAvailableToLoad(tRioStatusCode *status) = 0;
typedef enum
{
} tReadReceivedData_IfaceConstants;
virtual void strobeReadReceivedData(tRioStatusCode *status) = 0;
private:
tSPI(const tSPI&);
void operator=(const tSPI&);
};
}
}
#endif // __nFRC_2012_1_6_4_SPI_h__

View File

@@ -1,50 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2012_1_6_4_Solenoid_h__
#define __nFRC_2012_1_6_4_Solenoid_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2012_1_6_4
{
class tSolenoid
{
public:
tSolenoid(){}
virtual ~tSolenoid(){}
virtual tSystemInterface* getSystemInterface() = 0;
static tSolenoid* create(tRioStatusCode *status);
typedef enum
{
kNumSystems = 1,
} tIfaceConstants;
typedef enum
{
kNumDO7_0Elements = 2,
} tDO7_0_IfaceConstants;
virtual void writeDO7_0(unsigned char bitfield_index, unsigned char value, tRioStatusCode *status) = 0;
virtual unsigned char readDO7_0(unsigned char bitfield_index, tRioStatusCode *status) = 0;
private:
tSolenoid(const tSolenoid&);
void operator=(const tSolenoid&);
};
}
}
#endif // __nFRC_2012_1_6_4_Solenoid_h__

View File

@@ -1,71 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2012_1_6_4_SysWatchdog_h__
#define __nFRC_2012_1_6_4_SysWatchdog_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2012_1_6_4
{
class tSysWatchdog
{
public:
tSysWatchdog(){}
virtual ~tSysWatchdog(){}
virtual tSystemInterface* getSystemInterface() = 0;
static tSysWatchdog* create(tRioStatusCode *status);
typedef enum
{
kNumSystems = 1,
} tIfaceConstants;
typedef enum
{
} tCommand_IfaceConstants;
virtual void writeCommand(unsigned short value, tRioStatusCode *status) = 0;
virtual unsigned short readCommand(tRioStatusCode *status) = 0;
typedef enum
{
} tChallenge_IfaceConstants;
virtual unsigned char readChallenge(tRioStatusCode *status) = 0;
typedef enum
{
} tActive_IfaceConstants;
virtual void writeActive(bool value, tRioStatusCode *status) = 0;
virtual bool readActive(tRioStatusCode *status) = 0;
typedef enum
{
} tTimer_IfaceConstants;
virtual unsigned int readTimer(tRioStatusCode *status) = 0;
private:
tSysWatchdog(const tSysWatchdog&);
void operator=(const tSysWatchdog&);
};
}
}
#endif // __nFRC_2012_1_6_4_SysWatchdog_h__

View File

@@ -1,108 +0,0 @@
// Copyright (c) National Instruments 2008. All Rights Reserved.
// Do Not Edit... this file is generated!
#ifndef __nFRC_2012_1_6_4_Watchdog_h__
#define __nFRC_2012_1_6_4_Watchdog_h__
#include "tSystemInterface.h"
namespace nFPGA
{
namespace nFRC_2012_1_6_4
{
class tWatchdog
{
public:
tWatchdog(){}
virtual ~tWatchdog(){}
virtual tSystemInterface* getSystemInterface() = 0;
static tWatchdog* create(tRioStatusCode *status);
typedef enum
{
kNumSystems = 1,
} tIfaceConstants;
typedef
union{
struct{
#ifdef __vxworks
unsigned SystemActive : 1;
unsigned Alive : 1;
unsigned SysDisableCount : 15;
unsigned DisableCount : 15;
#else
unsigned DisableCount : 15;
unsigned SysDisableCount : 15;
unsigned Alive : 1;
unsigned SystemActive : 1;
#endif
};
struct{
unsigned value : 32;
};
} tStatus;
typedef enum
{
} tStatus_IfaceConstants;
virtual tStatus readStatus(tRioStatusCode *status) = 0;
virtual bool readStatus_SystemActive(tRioStatusCode *status) = 0;
virtual bool readStatus_Alive(tRioStatusCode *status) = 0;
virtual unsigned short readStatus_SysDisableCount(tRioStatusCode *status) = 0;
virtual unsigned short readStatus_DisableCount(tRioStatusCode *status) = 0;
typedef enum
{
} tKill_IfaceConstants;
virtual void strobeKill(tRioStatusCode *status) = 0;
typedef enum
{
} tFeed_IfaceConstants;
virtual void strobeFeed(tRioStatusCode *status) = 0;
typedef enum
{
} tTimer_IfaceConstants;
virtual unsigned int readTimer(tRioStatusCode *status) = 0;
typedef enum
{
} tExpiration_IfaceConstants;
virtual void writeExpiration(unsigned int value, tRioStatusCode *status) = 0;
virtual unsigned int readExpiration(tRioStatusCode *status) = 0;
typedef enum
{
} tImmortal_IfaceConstants;
virtual void writeImmortal(bool value, tRioStatusCode *status) = 0;
virtual bool readImmortal(tRioStatusCode *status) = 0;
private:
tWatchdog(const tWatchdog&);
void operator=(const tWatchdog&);
};
}
}
#endif // __nFRC_2012_1_6_4_Watchdog_h__

View File

@@ -0,0 +1,66 @@
// CANSessionMux.h
//
// Defines the API for building a CAN Interface Plugin to support
// PWM-cable-free CAN motor control on FRC robots. This allows you
// to connect any CAN interface to the secure Jaguar CAN driver.
//
#ifndef __CANSessionMux_h__
#define __CANSessionMux_h__
#if defined(__vxworks)
#include <vxWorks.h>
#else
#include <stdint.h>
#endif
#define CAN_SEND_PERIOD_NO_REPEAT 0
#define CAN_SEND_PERIOD_STOP_REPEATING -1
/* Flags in the upper bits of the messageID */
#define CAN_IS_FRAME_REMOTE 0x80000000
#define CAN_IS_FRAME_11BIT 0x40000000
#define ERR_CANSessionMux_InvalidBuffer -44086
#define ERR_CANSessionMux_MessageNotFound -44087
#define WARN_CANSessionMux_NoToken 44087
#define ERR_CANSessionMux_NotAllowed -44088
#define ERR_CANSessionMux_NotInitialized -44089
#define ERR_CANSessionMux_SessionOverrun 44050
struct tCANStreamMessage{
uint32_t messageID;
uint32_t timeStamp;
uint8_t data[8];
uint8_t dataSize;
};
#ifdef __cplusplus
namespace nCANSessionMux
{
void sendMessage_wrapper(uint32_t messageID, const uint8_t *data, uint8_t dataSize, int32_t periodMs, int32_t *status);
void receiveMessage_wrapper(uint32_t *messageID, uint32_t messageIDMask, uint8_t *data, uint8_t *dataSize, uint32_t *timeStamp, int32_t *status);
void openStreamSession(uint32_t *sessionHandle, uint32_t messageID, uint32_t messageIDMask, uint32_t maxMessages, int32_t *status);
void closeStreamSession(uint32_t sessionHandle);
void readStreamSession(uint32_t sessionHandle, struct tCANStreamMessage *messages, uint32_t messagesToRead, uint32_t *messagesRead, int32_t *status);
void getCANStatus(float *percentBusUtilization, uint32_t *busOffCount, uint32_t *txFullCount, uint32_t *receiveErrorCount, uint32_t *transmitErrorCount, int32_t *status);
}
#endif
#ifdef __cplusplus
extern "C"
{
#endif
void FRC_NetworkCommunication_CANSessionMux_sendMessage(uint32_t messageID, const uint8_t *data, uint8_t dataSize, int32_t periodMs, int32_t *status);
void FRC_NetworkCommunication_CANSessionMux_receiveMessage(uint32_t *messageID, uint32_t messageIDMask, uint8_t *data, uint8_t *dataSize, uint32_t *timeStamp, int32_t *status);
void FRC_NetworkCommunication_CANSessionMux_openStreamSession(uint32_t *sessionHandle, uint32_t messageID, uint32_t messageIDMask, uint32_t maxMessages, int32_t *status);
void FRC_NetworkCommunication_CANSessionMux_closeStreamSession(uint32_t sessionHandle);
void FRC_NetworkCommunication_CANSessionMux_readStreamSession(uint32_t sessionHandle, struct tCANStreamMessage *messages, uint32_t messagesToRead, uint32_t *messagesRead, int32_t *status);
void FRC_NetworkCommunication_CANSessionMux_getCANStatus(float *percentBusUtilization, uint32_t *busOffCount, uint32_t *txFullCount, uint32_t *receiveErrorCount, uint32_t *transmitErrorCount, int32_t *status);
#ifdef __cplusplus
}
#endif
#endif // __CANSessionMux_h__

View File

@@ -0,0 +1,163 @@
/*************************************************************
* NOTICE
*
* These are the only externally exposed functions to the
* NetworkCommunication library
*
* This is an implementation of FRC Spec for Comm Protocol
* Revision 4.5, June 30, 2008
*
* Copyright (c) National Instruments 2008. All Rights Reserved.
*
*************************************************************/
#ifndef __FRC_COMM_H__
#define __FRC_COMM_H__
#ifdef WIN32
# include <vxWorks_compat.h>
#ifdef USE_THRIFT
# define EXPORT_FUNC
# else
# define EXPORT_FUNC __declspec(dllexport) __cdecl
# endif
#elif defined(__vxworks)
# include <vxWorks.h>
# define EXPORT_FUNC
#elif defined(__linux)
# include <stdint.h>
# include <pthread.h>
# define EXPORT_FUNC
#endif
#define ERR_FRCSystem_NetCommNotResponding -44049
#define ERR_FRCSystem_NoDSConnection -44018
#ifdef WIN32
# define __DEPRECATED__ __declspec(deprecated)
#else
# define __DEPRECATED__ __attribute__((__deprecated__))
#endif
enum AllianceStationID_t {
kAllianceStationID_red1,
kAllianceStationID_red2,
kAllianceStationID_red3,
kAllianceStationID_blue1,
kAllianceStationID_blue2,
kAllianceStationID_blue3,
};
enum MatchType_t {
kMatchType_none,
kMatchType_practice,
kMatchType_qualification,
kMatchType_elimination,
};
struct ControlWord_t {
#ifndef __vxworks
uint32_t enabled : 1;
uint32_t autonomous : 1;
uint32_t test :1;
uint32_t eStop : 1;
uint32_t fmsAttached:1;
uint32_t dsAttached:1;
uint32_t control_reserved : 26;
#else
uint32_t control_reserved : 26;
uint32_t dsAttached:1;
uint32_t fmsAttached:1;
uint32_t eStop : 1;
uint32_t test :1;
uint32_t autonomous : 1;
uint32_t enabled : 1;
#endif
};
struct JoystickAxes_t {
uint16_t count;
int16_t axes[1];
};
struct JoystickPOV_t {
uint16_t count;
int16_t povs[1];
};
#ifdef __cplusplus
extern "C" {
#endif
int EXPORT_FUNC FRC_NetworkCommunication_Reserve(void *instance);
#ifndef SIMULATION
void EXPORT_FUNC getFPGAHardwareVersion(uint16_t *fpgaVersion, uint32_t *fpgaRevision);
#endif
/**
* Safely copy data into the status packet to be sent back to the driver station.
* @deprecated battery is the only parameter to this function that is still used, and only on cRIO / simulation.
*/
__DEPRECATED__ int EXPORT_FUNC setStatusData(float battery, uint8_t dsDigitalOut, uint8_t updateNumber,
const char *userDataHigh, int userDataHighLength,
const char *userDataLow, int userDataLowLength, int wait_ms);
/**
* Send error data to the DS
* @deprecated This old method is hard to parse on the DS side. It will be removed soon. Use FRC_NetworkCommunication_sendError instead.
* @param errorData is a cstr of the error message
* @param errorDataLength is the length of the errorData
* @param wait_ms is ignored (included for binary compatibility)
* @return 0 on success, 1 on no DS connection
*/
__DEPRECATED__ int EXPORT_FUNC setErrorData(const char *errors, int errorsLength, int wait_ms);
/**
* Send a console output line to the Driver Station
* @param line a null-terminated string
* @return 0 on success, other on failure
*/
int EXPORT_FUNC FRC_NetworkCommunication_sendConsoleLine(const char *line);
/**
* Send an error to the Driver Station
* @param isError true if error, false if warning
* @param errorCode value of error condition
* @param isLVCode true if error code is defined in errors.txt, false if not (i.e. made up for C++)
* @param details error description that contains details such as which resource number caused the failure
* @param location Source file, function, and line number that the error was generated - optional
* @param callStack The details about what functions were called through before the error was reported - optional
* @return 0 on success, other on failure
*/
int EXPORT_FUNC FRC_NetworkCommunication_sendError(int isError, int32_t errorCode, int isLVCode,
const char *details, const char *location, const char *callStack);
#ifdef WIN32
void EXPORT_FUNC setNewDataSem(HANDLE);
#elif defined (__vxworks)
void EXPORT_FUNC setNewDataSem(SEM_ID);
#else
void EXPORT_FUNC setNewDataSem(pthread_cond_t *);
#endif
// this uint32_t is really a LVRefNum
int EXPORT_FUNC setNewDataOccurRef(uint32_t refnum);
int EXPORT_FUNC FRC_NetworkCommunication_getControlWord(struct ControlWord_t *controlWord);
int EXPORT_FUNC FRC_NetworkCommunication_getAllianceStation(enum AllianceStationID_t *allianceStation);
int EXPORT_FUNC FRC_NetworkCommunication_getMatchTime(float *matchTime);
int EXPORT_FUNC FRC_NetworkCommunication_getJoystickAxes(uint8_t joystickNum, struct JoystickAxes_t *axes, uint8_t maxAxes);
int EXPORT_FUNC FRC_NetworkCommunication_getJoystickButtons(uint8_t joystickNum, uint32_t *buttons, uint8_t *count);
int EXPORT_FUNC FRC_NetworkCommunication_getJoystickPOVs(uint8_t joystickNum, struct JoystickPOV_t *povs, uint8_t maxPOVs);
int EXPORT_FUNC FRC_NetworkCommunication_setJoystickOutputs(uint8_t joystickNum, uint32_t hidOutputs, uint16_t leftRumble, uint16_t rightRumble);
int EXPORT_FUNC FRC_NetworkCommunication_getJoystickDesc(uint8_t joystickNum, uint8_t *isXBox, uint8_t *type, char *name,
uint8_t *axisCount, uint8_t *axisTypes, uint8_t *buttonCount, uint8_t *povCount);
void EXPORT_FUNC FRC_NetworkCommunication_getVersionString(char *version);
int EXPORT_FUNC FRC_NetworkCommunication_observeUserProgramStarting(void);
void EXPORT_FUNC FRC_NetworkCommunication_observeUserProgramDisabled(void);
void EXPORT_FUNC FRC_NetworkCommunication_observeUserProgramAutonomous(void);
void EXPORT_FUNC FRC_NetworkCommunication_observeUserProgramTeleop(void);
void EXPORT_FUNC FRC_NetworkCommunication_observeUserProgramTest(void);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -0,0 +1,58 @@
#ifndef __LoadOut_h__
#define __LoadOut_h__
#ifdef WIN32
#include <vxWorks_compat.h>
#define EXPORT_FUNC __declspec(dllexport) __cdecl
#elif defined (__vxworks)
#include <vxWorks.h>
#define EXPORT_FUNC
#else
#include <stdint.h>
#define EXPORT_FUNC
#endif
#define kMaxModuleNumber 2
namespace nLoadOut
{
#if defined(__vxworks) || defined(SIMULATION)
typedef enum {
kModuleType_Unknown = 0x00,
kModuleType_Analog = 0x01,
kModuleType_Digital = 0x02,
kModuleType_Solenoid = 0x03,
} tModuleType;
bool EXPORT_FUNC getModulePresence(tModuleType moduleType, uint8_t moduleNumber);
#endif
typedef enum {
kTargetClass_Unknown = 0x00,
kTargetClass_FRC1 = 0x10,
kTargetClass_FRC2 = 0x20,
kTargetClass_FRC3 = 0x30,
kTargetClass_RoboRIO = 0x40,
#if defined(__vxworks) || defined(SIMULATION)
kTargetClass_FRC2_Analog = kTargetClass_FRC2 | kModuleType_Analog,
kTargetClass_FRC2_Digital = kTargetClass_FRC2 | kModuleType_Digital,
kTargetClass_FRC2_Solenoid = kTargetClass_FRC2 | kModuleType_Solenoid,
#endif
kTargetClass_FamilyMask = 0xF0,
kTargetClass_ModuleMask = 0x0F,
} tTargetClass;
tTargetClass EXPORT_FUNC getTargetClass();
}
#ifdef __cplusplus
extern "C" {
#endif
#if defined(__vxworks) || defined(SIMULATION)
uint32_t EXPORT_FUNC FRC_NetworkCommunication_nLoadOut_getModulePresence(uint32_t moduleType, uint8_t moduleNumber);
#endif
uint32_t EXPORT_FUNC FRC_NetworkCommunication_nLoadOut_getTargetClass();
#ifdef __cplusplus
}
#endif
#endif // __LoadOut_h__

View File

@@ -0,0 +1,150 @@
#ifndef __UsageReporting_h__
#define __UsageReporting_h__
#ifdef WIN32
#include <stdint.h>
#define EXPORT_FUNC __declspec(dllexport) __cdecl
#elif defined (__vxworks)
#include <vxWorks.h>
#define EXPORT_FUNC
#else
#include <stdint.h>
#include <stdlib.h>
#define EXPORT_FUNC
#endif
#define kUsageReporting_version 1
namespace nUsageReporting
{
typedef enum
{
kResourceType_Controller,
kResourceType_Module,
kResourceType_Language,
kResourceType_CANPlugin,
kResourceType_Accelerometer,
kResourceType_ADXL345,
kResourceType_AnalogChannel,
kResourceType_AnalogTrigger,
kResourceType_AnalogTriggerOutput,
kResourceType_CANJaguar,
kResourceType_Compressor, // 10
kResourceType_Counter,
kResourceType_Dashboard,
kResourceType_DigitalInput,
kResourceType_DigitalOutput,
kResourceType_DriverStationCIO,
kResourceType_DriverStationEIO,
kResourceType_DriverStationLCD,
kResourceType_Encoder,
kResourceType_GearTooth,
kResourceType_Gyro, // 20
kResourceType_I2C,
kResourceType_Framework,
kResourceType_Jaguar,
kResourceType_Joystick,
kResourceType_Kinect,
kResourceType_KinectStick,
kResourceType_PIDController,
kResourceType_Preferences,
kResourceType_PWM,
kResourceType_Relay, // 30
kResourceType_RobotDrive,
kResourceType_SerialPort,
kResourceType_Servo,
kResourceType_Solenoid,
kResourceType_SPI,
kResourceType_Task,
kResourceType_Ultrasonic,
kResourceType_Victor,
kResourceType_Button,
kResourceType_Command, // 40
kResourceType_AxisCamera,
kResourceType_PCVideoServer,
kResourceType_SmartDashboard,
kResourceType_Talon,
kResourceType_HiTechnicColorSensor,
kResourceType_HiTechnicAccel,
kResourceType_HiTechnicCompass,
kResourceType_SRF08,
kResourceType_AnalogOutput,
kResourceType_VictorSP, // 50
kResourceType_TalonSRX,
kResourceType_CANTalonSRX,
kResourceType_ADXL362,
kResourceType_ADXRS450,
kResourceType_RevSPARK,
kResourceType_MindsensorsSD540,
kResourceType_DigitalFilter,
kResourceType_ADIS16448,
} 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,
kFramework_CommandControl = 3,
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;
/**
* Report the usage of a resource of interest.
*
* @param resource one of the values in the tResourceType above (max value 51).
* @param instanceNumber an index that identifies the resource instance.
* @param context an optional additional context number for some cases (such as module number). Set to 0 to omit.
* @param feature a string to be included describing features in use on a specific resource. Setting the same resource more than once allows you to change the feature string.
*/
uint32_t EXPORT_FUNC report(tResourceType resource, uint8_t instanceNumber, uint8_t context = 0, const char *feature = NULL);
}
#ifdef __cplusplus
extern "C" {
#endif
uint32_t EXPORT_FUNC FRC_NetworkCommunication_nUsageReporting_report(uint8_t resource, uint8_t instanceNumber, uint8_t context, const char *feature);
#ifdef __cplusplus
}
#endif
#endif // __UsageReporting_h__

View File

@@ -16,6 +16,7 @@
#include "HAL/handles/HandlesInternal.h"
#include "HAL/handles/LimitedHandleResource.h"
#include "PortsInternal.h"
#include "support/SafeThread.h"
using namespace hal;
@@ -24,6 +25,53 @@ struct Interrupt {
std::unique_ptr<tInterrupt> anInterrupt;
std::unique_ptr<tInterruptManager> manager;
};
// Safe thread to allow callbacks to run on their own thread
class InterruptThread : public wpi::SafeThread {
public:
void Main() {
std::unique_lock<std::mutex> lock(m_mutex);
while (m_active) {
m_cond.wait(lock, [&] { return !m_active || m_notify; });
if (!m_active) break;
m_notify = false;
HAL_InterruptHandlerFunction handler = m_handler;
uint32_t mask = m_mask;
void* param = m_param;
lock.unlock(); // don't hold mutex during callback execution
handler(mask, param);
lock.lock();
}
}
bool m_notify = false;
HAL_InterruptHandlerFunction m_handler;
void* m_param;
uint32_t m_mask;
};
class InterruptThreadOwner : public wpi::SafeThreadOwner<InterruptThread> {
public:
void SetFunc(HAL_InterruptHandlerFunction handler, void* param) {
auto thr = GetThread();
if (!thr) return;
thr->m_handler = handler;
thr->m_param = param;
}
void Notify(uint32_t mask) {
auto thr = GetThread();
if (!thr) return;
thr->m_mask = mask;
thr->m_notify = true;
thr->m_cond.notify_one();
}
};
} // namespace
static void threadedInterruptHandler(uint32_t mask, void* param) {
static_cast<InterruptThreadOwner*>(param)->Notify(mask);
}
static LimitedHandleResource<HAL_InterruptHandle, Interrupt, kNumInterrupts,
@@ -180,6 +228,21 @@ void HAL_AttachInterruptHandler(HAL_InterruptHandle interruptHandle,
anInterrupt->manager->registerHandler(handler, param, status);
}
void HAL_AttachInterruptHandlerThreaded(HAL_InterruptHandle interrupt_handle,
HAL_InterruptHandlerFunction handler,
void* param, int32_t* status) {
InterruptThreadOwner* intr = new InterruptThreadOwner;
intr->Start();
intr->SetFunc(handler, param);
HAL_AttachInterruptHandler(interrupt_handle, threadedInterruptHandler, intr,
status);
if (*status != 0) {
delete intr;
}
}
void HAL_SetInterruptUpSourceEdge(HAL_InterruptHandle interruptHandle,
HAL_Bool risingEdge, HAL_Bool fallingEdge,
int32_t* status) {

View File

@@ -19,6 +19,7 @@
#include "HAL/cpp/make_unique.h"
#include "HAL/cpp/priority_mutex.h"
#include "HAL/handles/UnlimitedHandleResource.h"
#include "support/SafeThread.h"
static const int32_t kTimerInterruptNumber = 28;
@@ -35,8 +36,55 @@ struct Notifier {
HAL_NotifierProcessFunction process;
uint64_t triggerTime = UINT64_MAX;
HAL_NotifierHandle handle;
bool threaded;
};
}
// Safe thread to allow callbacks to run on their own thread
class NotifierThread : public wpi::SafeThread {
public:
void Main() {
std::unique_lock<std::mutex> lock(m_mutex);
while (m_active) {
m_cond.wait(lock, [&] { return !m_active || m_notify; });
if (!m_active) break;
m_notify = false;
uint64_t currentTime = m_currentTime;
HAL_NotifierHandle handle = m_handle;
HAL_NotifierProcessFunction process = m_process;
lock.unlock(); // don't hold mutex during callback execution
process(currentTime, handle);
lock.lock();
}
}
bool m_notify = false;
HAL_NotifierHandle m_handle = HAL_kInvalidHandle;
HAL_NotifierProcessFunction m_process;
uint64_t m_currentTime;
};
class NotifierThreadOwner : public wpi::SafeThreadOwner<NotifierThread> {
public:
void SetFunc(HAL_NotifierProcessFunction process, void* param) {
auto thr = GetThread();
if (!thr) return;
thr->m_process = process;
m_param = param;
}
void Notify(uint64_t currentTime, HAL_NotifierHandle handle) {
auto thr = GetThread();
if (!thr) return;
thr->m_currentTime = currentTime;
thr->m_handle = handle;
thr->m_notify = true;
thr->m_cond.notify_one();
}
void* m_param;
};
} // namespace
static std::shared_ptr<Notifier> notifiers;
static std::atomic_flag notifierAtexitRegistered = ATOMIC_FLAG_INIT;
static std::atomic_int notifierRefCount{0};
@@ -108,6 +156,18 @@ static void cleanupNotifierAtExit() {
notifierManager = nullptr;
}
static void threadedNotifierHandler(uint64_t currentTimeInt,
HAL_NotifierHandle handle) {
// Grab notifier and get handler param
auto notifier = notifierHandles.Get(handle);
if (!notifier) return;
auto notifierPointer = notifier->param;
if (notifierPointer == nullptr) return;
NotifierThreadOwner* owner =
static_cast<NotifierThreadOwner*>(notifierPointer);
owner->Notify(currentTimeInt, handle);
}
extern "C" {
HAL_NotifierHandle HAL_InitializeNotifier(HAL_NotifierProcessFunction process,
@@ -143,10 +203,34 @@ HAL_NotifierHandle HAL_InitializeNotifier(HAL_NotifierProcessFunction process,
notifier->param = param;
notifier->process = process;
notifier->handle = handle;
notifier->threaded = false;
notifiers = notifier;
return handle;
}
HAL_NotifierHandle HAL_InitializeNotifierThreaded(
HAL_NotifierProcessFunction process, void* param, int32_t* status) {
NotifierThreadOwner* notify = new NotifierThreadOwner;
notify->Start();
notify->SetFunc(process, param);
auto notifierHandle =
HAL_InitializeNotifier(threadedNotifierHandler, notify, status);
if (notifierHandle == HAL_kInvalidHandle || *status != 0) {
delete notify;
return HAL_kInvalidHandle;
}
auto notifier = notifierHandles.Get(notifierHandle);
if (!notifier) {
return HAL_kInvalidHandle;
}
notifier->threaded = true;
return notifierHandle;
}
void HAL_CleanNotifier(HAL_NotifierHandle notifierHandle, int32_t* status) {
{
std::lock_guard<priority_recursive_mutex> sync(notifierMutex);
@@ -158,6 +242,12 @@ void HAL_CleanNotifier(HAL_NotifierHandle notifierHandle, int32_t* status) {
if (notifier->next) notifier->next->prev = notifier->prev;
if (notifiers == notifier) notifiers = notifier->next;
notifierHandles.Free(notifierHandle);
if (notifier->threaded) {
NotifierThreadOwner* owner =
static_cast<NotifierThreadOwner*>(notifier->param);
delete owner;
}
}
if (notifierRefCount.fetch_sub(1) == 1) {
@@ -178,6 +268,12 @@ void HAL_CleanNotifier(HAL_NotifierHandle notifierHandle, int32_t* status) {
void* HAL_GetNotifierParam(HAL_NotifierHandle notifierHandle, int32_t* status) {
auto notifier = notifierHandles.Get(notifierHandle);
if (!notifier) return nullptr;
if (notifier->threaded) {
// If threaded, return thread param rather then notifier param
NotifierThreadOwner* owner =
static_cast<NotifierThreadOwner*>(notifier->param);
return owner->m_param;
}
return notifier->param;
}

View File

@@ -441,6 +441,8 @@ void HAL_SetPWMPeriodScale(HAL_DigitalHandle pwmPortHandle, int32_t squelchMask,
* @return The loop time
*/
int32_t HAL_GetLoopTiming(int32_t* status) {
initializeDigital(status);
if (*status != 0) return 0;
return pwmSystem->readLoopTiming(status);
}
}

View File

@@ -1,2 +1,2 @@
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libFRC_NetworkCommunication.so.16 )
GROUP ( libFRC_NetworkCommunication.so.17 )

View File

@@ -1,2 +0,0 @@
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libFRC_NetworkCommunication.so.16.0 )

View File

@@ -1,2 +0,0 @@
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libFRC_NetworkCommunication.so.16.0.0 )

View File

@@ -0,0 +1,2 @@
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libFRC_NetworkCommunication.so.17.0 )

View File

@@ -0,0 +1,2 @@
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libFRC_NetworkCommunication.so.17.0.0 )

Binary file not shown.

View File

@@ -1,2 +1,2 @@
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libFRC_NetworkCommunicationLV.so.16 )
GROUP ( libFRC_NetworkCommunicationLV.so.17 )

View File

@@ -1,2 +0,0 @@
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libFRC_NetworkCommunicationLV.so.16.0 )

View File

@@ -1,2 +0,0 @@
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libFRC_NetworkCommunicationLV.so.16.0.0 )

View File

@@ -0,0 +1,2 @@
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libFRC_NetworkCommunicationLV.so.17.0 )

View File

@@ -0,0 +1,2 @@
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libFRC_NetworkCommunicationLV.so.17.0.0 )

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,2 +1,2 @@
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libNiFpga.so.15 )
GROUP ( libNiFpga.so.16 )

Binary file not shown.

View File

@@ -1,2 +1,2 @@
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libNiFpga.so.15.0 )
GROUP ( libNiFpga.so.16.0 )

View File

@@ -1,2 +1,2 @@
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libNiRioSrv.so.15.0 )
GROUP ( libNiFpga.so.16.0.0 )

Binary file not shown.

View File

@@ -1,2 +1,2 @@
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libNiFpgaLv.so.15 )
GROUP ( libNiFpgaLv.so.16 )

View File

@@ -1,2 +0,0 @@
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libNiFpgaLv.so.15.0.0 )

Binary file not shown.

View File

@@ -1,2 +1,2 @@
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libNiFpga.so.15.0.0 )
GROUP ( libNiFpgaLv.so.16.0 )

View File

@@ -0,0 +1,2 @@
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libNiFpgaLv.so.16.0.0 )

Binary file not shown.

View File

@@ -1,2 +1,2 @@
OUTPUT_FORMAT(elf32-littlearm)
GROUP ( libNiRioSrv.so.15 )
GROUP ( libNiRioSrv.so.16 )

Some files were not shown because too many files have changed in this diff Show More