Commit Graph

472 Commits

Author SHA1 Message Date
Peter Johnson
c2ecffe708 Update to latest UsageReporting.h.
Also fix DigitalGlitchFilter usage reporting for C++ (only report on
construction rather than on each call) and add for Java.

Change-Id: I73758b16d81c40442c4acec43e0aa6804b2ba250
2015-12-15 20:47:21 -08:00
Kevin O'Connor
ec69c6a866 Fix Solenoid Resource object creation. Fixes artf4758.
Change-Id: I8b40d6606d7091fa6e8bf95b75f820e6b524ae06
2015-12-15 20:02:59 -08:00
Peter Johnson
bc0c895619 Take 2 on usage reporting.
The previous commit missed the MindsensorsSD540 value.

Remove wpilibc/Athena/include/NetworkCommunication/UsageReporting.h copy; it
was not actually used (all references except the one in DriverStation.cpp
had been commented out), and has been superseded by the one in HAL.hpp.

Change-Id: I51e2eafa85ee5e40050d702aa0bf69171e887a60
2015-12-14 21:15:47 -08:00
Peter Johnson
9e18330586 Report usage for ADXL362 and ADRXS450.
Change-Id: I31c6b76923923606ea2838f346b24375b97b01ef
2015-12-13 17:52:10 -08:00
Fredric Silberberg
82d89d3b70 Updated to NI image v18
Change-Id: If120eee63c7815bfcf2f05fdf48a0399497a645d
2015-12-11 18:24:01 -05:00
Peter Johnson
c70e710caf Remove raw pointer deprecation warnings.
See discussion in 2016 beta forums for rationale.

Change-Id: I86a4c1bd61655f4895e2fe0e935f25dc8a89d830
2015-12-10 21:54:31 -08:00
Peter Johnson
bafe4e56a7 Notifier: Change back to constructor from ATOMIC_VAR_INIT.
Change-Id: Ia0addacee57f03e12f2ca12f7b5a1ba29d913ac4
2015-12-09 20:24:39 -08:00
Peter Johnson
bd2a28f597 Add ADXRS450_Gyro.
This is a digital gyro interfaced via SPI.  Uses the HAL SPI accumulator.

Basic code function successfully tested on a ADXRS453.

Change-Id: Ibc0c7db9964c041fb1e04af4db17e3310ea83c04
2015-12-09 20:24:39 -08:00
Brad Miller (WPI)
6851dee3f6 Merge "Gyro: Add support for fixed calibration (artf4124)." 2015-12-09 06:54:52 -08:00
Peter Johnson
de219055f0 HAL: Add software-based accumulator for SPI devices.
Change-Id: I154c4c8f438163edf3ebc2c38f67a976d8cfbfd7
2015-12-09 06:50:36 -08:00
Brad Miller (WPI)
530ce310a6 Merge "HAL: Add support for multiple Notifiers." 2015-12-09 06:50:00 -08:00
Peter_Mitrano
8b0f19a0fb Updated Notifier to match changes in gerrit 1171
some changes were ommitted because they don't exist in sim

Change-Id: I6901998635f73c14efc894c408d2b5fd98e4d94c
2015-12-07 12:12:54 -05:00
Fredric Silberberg
d0c01ac30d Updates wpilib to use different repos for the different build versions, instead of using classifiers
Change-Id: Ic4cd1f1f93ae1036834cdcf1d0f1499fc946a429
2015-12-06 16:38:57 -05:00
Brad Miller (WPI)
b71cea69c8 Merge "DigitalInput: Don't crash on Get() of invalid channel." 2015-12-02 06:18:24 -08:00
Brad Miller (WPI)
01b64b5bd5 Merge "Add support for ADXL362 SPI accelerometer." 2015-12-02 06:14:35 -08:00
Brad Miller (WPI)
e9f98b28cc Merge "Reduce overhead of setErrorX() calls." 2015-12-02 05:55:40 -08:00
Austin Schuh
b3b03c43c8 artf4700: Added DigitalGlitchFilter
Initial Java support from Tyler Veness.
Final java support done by Jerry Morrison.

Change-Id: I1f85eb555f9ea4c0250c4c6729d7c51a76f5bef4
2015-12-01 01:30:42 -08:00
Joseph
375a19563e Gyro: Add support for fixed calibration (artf4124).
Testing added for Gyro constructors, getters, and setters.

Change-Id: Id3ba2656bfdb286e01fbd95dff95115a3446c92e
2015-11-30 23:43:32 -08:00
Peter Johnson
93b65aad36 DigitalInput: Don't crash on Get() of invalid channel.
The constructor sets m_channel to UINT32_MAX and reports an error if the
channel index is out of range (or CheckDigitalChannel fails for some other
reason).  A Get() following this would result in a crash because it wasn't
checking StatusIsFatal().

The new behavior now checks StatusIsFatal() and simply returns false.

Change-Id: I15529401294e4ccd1e09df834e02cca367fab67c
2015-11-30 22:44:48 -08:00
Peter Johnson
03c43a46d7 HAL: Add support for multiple Notifiers.
This is a poor man's version of the multi-instance Notifier support in
the higher level languages.  It's intended primarily so that notifiers
can be created internal to the HAL.

One benefit of this change is that the current FPGA timestamp is passed
as the first parameter to the ProcessQueue function (rather than the
useless interrupt mask).

Caution for other languages wrapping the HAL: this adds a parameter to
initializeNotifier().

An atexit hook is used for safe cleanup at program termination.

Change-Id: I782b3a74c10215588ae9b7191906fb4186a81028
2015-11-30 22:00:19 -08:00
Peter Johnson
a66eaa4348 Reduce overhead of setErrorX() calls.
Checking the status code in the macro before "context" is used avoids
significant overhead (string processing) in the common case when the code
is zero.

Change-Id: I69b8b220187ac1ab905cdf56dde5c4b6c61101b7
2015-11-28 11:44:26 -08:00
Austin Schuh
61760c839a Removed unnecessary ::std::string calls.
All the Error and assert calls were using const ::std::string & arguments.
When provided with a char*, the compiler was creating a temporary string
object to pass in.  This was triggering mallocs everywhere, even in the
fast paths.

Change-Id: Ie0ad1f240334de677618086bddd64113c56aae6e
2015-11-28 11:44:09 -08:00
Tyler Veness
055ee09825 Fixed current and potential bugs caught by Coverity
Change-Id: I9f9d09dc797ffea062eeb49c881be1d5acb63d7b
2015-11-28 11:08:12 -08:00
Joe Ross
906fe65e39 Optimize Solenoid Gets. Fixes artf4730.
Implement GetAllSolenoids in the HAL so that SolenoidBase doesn't have to
read each solenoid individually.

Change-Id: I85559565949f7a7119ead410187235636a63f0ed
2015-11-28 03:29:03 -08:00
Brad Miller (WPI)
84ca2ab0f5 Merge "Prevent PID tests from hanging." 2015-11-28 03:11:45 -08:00
Peter Johnson (294)
d998e53f9a Merge "Moved gyro calibration into a separate function so teams can recalibrate at any time after construction" 2015-11-27 22:44:43 -08:00
Thad House
2f2184e8ce Makes HALSetDataSem take a MULTIWAIT_ID rather then a NATIVE_MULTIWAIT_ID
Having the HAL take a NATIVE_MULTIWAIT_ID without any way to get that
structure from extern "C" code is a problem. This makes it so it just
takes a MULTIWAIT_ID, and then grabs the native handle inside the HAL.

Change-Id: I06da18ba34adcea2f16e4e53da672f38be79e28e
Signed-off-by: Dustin Spicuzza <dustin@virtualroadside.com>
2015-11-27 22:33:28 -08:00
Thad House
de39877efb artf4153 Adds HAL structure memory management
In the current HAL, once the port structures were created, there was no
way to free the structures. The way the C++ libraries were written this
wasn't a problem, since it grabbed a copy of each and stored them in an
array on bootup. However java does not do this, and grabs new ports
every time an object is created. This causes memory leaks if an object
is ever disposed in java. The same thing looks to be happening in
python, and C# does it too currently, but that would change if this gets
merged.

Adds java memory management fixes

Adds memory management to AnalogInput and Analog Output C++

SolenoidPorts and Digital Ports are all hold static arrays with their
port pointers (although solenoid overwrites them if a new solenoid on
the same module is created), however analog always grabbed new pointers.
I would fix the solenoid one, but I don't know what the ideal way to do
it would be.

Silently ignores free(null) calls by checking passed parameter is non-null.

Change-Id: Id32993b57b53f896e46e55c97541d3bd90b52648
2015-11-27 22:02:02 -08:00
James Kuszmaul
e3191b0bfd Prevent PID tests from hanging.
For the previous couple of months, the PID tests have been hanging.

The reason that the tests have been hanging lies with the Notifier,
not the PID controller. Basically, a deadlock was occuring during
Notifier destruction when the notifier destructor was called while
the notifier interrupt handler was being called. Because the low-level
interrupt manager waits for the interrupt handler to finish executing before
disabling itself, the notifier destructor would not exit until the
ProcessQueue function finished. However, at the same time, the handler
was attempting to lock the queueMutex before continuing; the Notifier
destructor had locked the queueMutex while wrapping things up, meaning
that the last run of the handler would not complete until the destructor
did, resulting in a deadlock.

In order to repair this, I reduced the scope of the lock on the queueMutex
in the destructor so that it only locks when absolutely necessary. This
should work now.

This bug was likely introduced over the summer when we updated to stl
mutexes and locks, which may have messed up the original lock structure.

This likely did not affect any teams, as it can only occur if you are actively
destroying every* Notifier object present and if the destructor happens to be
called while the handler is being run.
*Note: the component of the destructor causing issues only ran if the last
  Notifier object is being destroyed.

Change-Id: I38ba4e60816a2a8d523e927c25378390a0755444
2015-11-27 21:37:10 -08:00
Tyler Veness
9b4dd268b0 Moved gyro calibration into a separate function so teams can recalibrate at any time after construction
Change-Id: I6c43af3ad8e21dcc82dded61f0cd0ae2ddbe0965
2015-11-27 10:33:22 -08:00
Peter Johnson (294)
68bb074165 Merge "Arguments to Task are now forwarded to std::thread more correctly" 2015-11-25 22:48:10 -08:00
Peter Johnson
c59e08ee9f Add support for ADXL362 SPI accelerometer.
Tested with hardware on both C++ and Java.

Change-Id: I52f95fc77fffe4efae0c8332007cd683835023ab
2015-11-24 23:48:53 -08:00
Tyler Veness
d59016be35 Arguments to Task are now forwarded to std::thread more correctly
Change-Id: I81a934a6fac4ead30c67010e9968e46ad2f86571
2015-11-24 01:14:42 -08:00
Peter Johnson
964b243619 Make PDP parameters consistent with other HAL functions.
All other HAL functions have status as the last parameter, only PDP did not.
This changes makes the PDP parameter order consistent with the rest of the HAL.

Change-Id: I725e33f75deab34e6a83b7048b2d6c365fa56a21
2015-11-23 23:31:57 -08:00
Tyler Veness
84e793503d std::shared_ptr doesn't need to be initialized with nullptr. The C++ standard already guarantees it will behave as if it is.
Change-Id: I160567e9fb2857f8d7ac4acbe093c4100a7421eb
2015-11-23 18:41:56 -08:00
Fredric Silberberg
6d854afb0e WPILib Reorganization
This is a major restructuring of the WPILib repository to simply build
procedures and remove the remnants of Maven from everything except the
eclipse plugins. Gradle files have been largely simplified or rewritten,
taking advantage of splitting up parts of the build into separate build
files for ease of reading.

The eclipse plugins are now in a separate project, as is ntcore. All
dependencies are resolved via Maven dependencies, with the
Jenkins-maintained WPILib repo. Project structures have also been
simplified: we no longer have separate subprojects inside wpilibc and
wpilibj. Where possible, these changes hav been done with git renames,
to make sure we still have full history for all repositories. Other
unrelated subprojects have also been broken out: OutlineViewer is now a
separate project.

Change-Id: Ib4e2a6e1a2f66427a14f16612b0e0d69ed661878
2015-11-21 18:26:49 -05:00
Peter Johnson
c20d34c2b6 Rename Gyro to AnalogGyro and make Gyro an interface.
Refactor common implementation parts of AnalogGyro into GyroBase.

This will make it possible to add digital gyros in a similar way to how
digital accelerometers were added.

Change-Id: I437ef259e9ecb81f18a91a95c5a58b6607db5e15
2015-11-18 21:25:30 -08:00
Tyler Veness
76756048c4 Notify the Driver Station that code is ready after robotInit is called
Change-Id: Id833a2a945c14bcbb4761d4fe463c6c9f7c4430c
2015-11-15 20:36:47 -08:00
Joe Ross
511c4a4d3b Update docs to reflect that PDP can now be at any address.
Change-Id: Ia6bba4c72588e261ec313fbc7bd62b83a61fb00b
2015-11-14 09:27:24 -08:00
Brad Miller (WPI)
26f1bd6a1c Merge "Fixed documentation generation for .inc files" 2015-11-03 08:29:33 -08:00
Brad Miller (WPI)
a34f3f238b Merge "HALUsageReporting::kFramework_Simple was renamed to match the corresponding robot framework's name" 2015-11-03 08:10:14 -08:00
Tyler Veness
231178c26a HALUsageReporting::kFramework_Simple was renamed to match the corresponding robot framework's name
Change-Id: I2ad0f8d48cabe5f6c1adf622cf5377eb5be362f7
2015-11-02 23:23:57 -08:00
Brad Miller
042e3a3237 Update the library version string for the driver station (artf4708) 2015-11-01 15:08:55 -05:00
Tyler Veness
520d946f63 Fixed documentation generation for .inc files
Change-Id: I2ba5cb335b2e29968069bd362793532de607679c
2015-11-01 01:17:26 -07:00
Omar Zrien
a0cc45a8f0 Format and style changes.
Rebuilt last SRX-related commit with latest checkout.

Change-Id: I9f10418580275dae5cd07d740d401d45ee44e276

C++: Added Magnetic Encoder sensor types
C++: API for changing status frame rates updated to use paramEnums.
C++: Added Setting nominal and peak outputs for closed loop modes.
C++: Added current-closed loop
C++: added vcomp mode
C++: Added unit scaling (rotations and rpm)
C++ Added allowableclosedlooperr
C++: Added auto zero position on index pin
C++: Added pulse width decoder API
C++: Added multiplicands in status frames, increasing the max reported pos and max rpm.
C++: Added SetClosedLoopOutputDirection() for reversing slave output and reversing single-direction closed loopoutput.
C++: Added generic ConfigSet and ConfigGet for future flexibility/features.
C++: Added IsSensorPresent
Java: Added Magnetic Encoder sensor types
Java: Added unit scaling (rotations and rpm)
Java: Added current-closed loop
Java: added vcomp mode
Java Added allowableclosedlooperr
Java: Added auto zero position on index pin
Java: Added pulse width decoder API
Java: setForwardSoftLimit and setReverseSoftLimit takes double instead of int so underneath we can support rotations instead of native units.
Java: Added generic SetParam and GetParam for future flexibility/features.
Java Added isSensorPresent

Change-Id: I800251510e411624dce5ee10272606c31764b8ab
2015-10-16 11:27:57 -07:00
Sam Carlberg
1316deaf5b Added LiveWindow support for PID control for CAN speed controllers.
Change-Id: Id32e27ee7074ffa23824d5d8c0e9509059001284
2015-10-14 16:47:13 -04:00
Brad Miller (WPI)
4036ddf552 Merge "Fixed miscellaneous typos" 2015-10-08 01:05:02 -07:00
Tyler Veness
32af49dbb8 Fixed miscellaneous typos
Renamed RelayCrossConnectFxiture to RelayCrossConnectFixture and fixed spelling of variable in PIDCommand class prototype

Change-Id: I2e0970c9b14f58b7fa5ad70024b29e7a54524f0c
2015-10-07 21:35:25 -07:00
Peter Johnson
c01d057d7b Counter: Explicitly call mode constructor.
This is a compiler bug workaround.  On gcc 4.8.2, the default argument to
the Counter(Mode) constructor is not recognized as a valid delegating
constructor to use.

Change-Id: I616453567c45ce523e14345bd667ea893bf219a3
2015-10-07 20:59:42 -07:00
Brad Miller (WPI)
9c1ab69871 Merge "Automatically set persistent on new Preferences keys." 2015-10-04 15:09:14 -07:00