mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
HAL: Use extern "C" in implementation files.
This turns accidental parameter mismatches between header and implementation into compiler errors. Change-Id: Ic26fabb82b2fd5f79407a11435cdbd35348af15f
This commit is contained in:
@@ -171,6 +171,8 @@ static double unpackAxis(int16_t raw) {
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
/**
|
||||
* Set the accelerometer to active or standby mode. It must be in standby
|
||||
* mode to change any configuration.
|
||||
@@ -232,3 +234,5 @@ double getAccelerometerZ() {
|
||||
int raw = (readRegister(kReg_OutZMSB) << 4) | (readRegister(kReg_OutZLSB) >> 4);
|
||||
return unpackAxis(raw);
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -24,18 +24,20 @@ struct AnalogPort {
|
||||
tAccumulator *accumulator;
|
||||
};
|
||||
|
||||
bool analogSampleRateSet = false;
|
||||
priority_recursive_mutex analogRegisterWindowMutex;
|
||||
tAI* analogInputSystem = NULL;
|
||||
tAO* analogOutputSystem = NULL;
|
||||
uint32_t analogNumChannelsToActivate = 0;
|
||||
static bool analogSampleRateSet = false;
|
||||
static priority_recursive_mutex analogRegisterWindowMutex;
|
||||
static tAI* analogInputSystem = NULL;
|
||||
static tAO* analogOutputSystem = NULL;
|
||||
static uint32_t analogNumChannelsToActivate = 0;
|
||||
|
||||
extern "C" {
|
||||
|
||||
// Utility methods defined below.
|
||||
uint32_t getAnalogNumActiveChannels(int32_t *status);
|
||||
uint32_t getAnalogNumChannelsToActivate(int32_t *status);
|
||||
void setAnalogNumChannelsToActivate(uint32_t channels);
|
||||
static uint32_t getAnalogNumActiveChannels(int32_t *status);
|
||||
static uint32_t getAnalogNumChannelsToActivate(int32_t *status);
|
||||
static void setAnalogNumChannelsToActivate(uint32_t channels);
|
||||
|
||||
bool analogSystemInitialized = false;
|
||||
static bool analogSystemInitialized = false;
|
||||
|
||||
/**
|
||||
* Initialize the analog System.
|
||||
@@ -424,7 +426,7 @@ int32_t getAnalogOffset(void* analog_port_pointer, int32_t *status) {
|
||||
*
|
||||
* @return Active channels.
|
||||
*/
|
||||
uint32_t getAnalogNumActiveChannels(int32_t *status) {
|
||||
static uint32_t getAnalogNumActiveChannels(int32_t *status) {
|
||||
uint32_t scanSize = analogInputSystem->readConfig_ScanSize(status);
|
||||
if (scanSize == 0)
|
||||
return 8;
|
||||
@@ -442,7 +444,7 @@ uint32_t getAnalogNumActiveChannels(int32_t *status) {
|
||||
*
|
||||
* @return Value to write to the active channels field.
|
||||
*/
|
||||
uint32_t getAnalogNumChannelsToActivate(int32_t *status) {
|
||||
static uint32_t getAnalogNumChannelsToActivate(int32_t *status) {
|
||||
if(analogNumChannelsToActivate == 0) return getAnalogNumActiveChannels(status);
|
||||
return analogNumChannelsToActivate;
|
||||
}
|
||||
@@ -455,7 +457,7 @@ uint32_t getAnalogNumChannelsToActivate(int32_t *status) {
|
||||
*
|
||||
* @param channels Number of active channels.
|
||||
*/
|
||||
void setAnalogNumChannelsToActivate(uint32_t channels) {
|
||||
static void setAnalogNumChannelsToActivate(uint32_t channels) {
|
||||
analogNumChannelsToActivate = channels;
|
||||
}
|
||||
|
||||
@@ -744,3 +746,5 @@ int32_t getAnalogVoltsToValueIntHack(void* analog_port_pointer, int voltage, int
|
||||
void setAnalogTriggerLimitsVoltageIntHack(void* analog_trigger_pointer, int lower, int upper, int32_t *status) {
|
||||
setAnalogTriggerLimitsVoltage(analog_trigger_pointer, intToFloat(lower), intToFloat(upper), status);
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -3,13 +3,15 @@
|
||||
#include <iostream>
|
||||
|
||||
static const int NUM_MODULE_NUMBERS = 63;
|
||||
extern PCM *modules[NUM_MODULE_NUMBERS];
|
||||
extern PCM *PCM_modules[NUM_MODULE_NUMBERS];
|
||||
extern void initializePCM(int module);
|
||||
|
||||
extern "C" {
|
||||
|
||||
void *initializeCompressor(uint8_t module) {
|
||||
initializePCM(module);
|
||||
|
||||
return modules[module];
|
||||
return PCM_modules[module];
|
||||
}
|
||||
|
||||
bool checkCompressorModule(uint8_t module) {
|
||||
@@ -114,3 +116,5 @@ void clearAllPCMStickyFaults(void *pcm_pointer, int32_t *status) {
|
||||
|
||||
*status = module->ClearStickyFaults();
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -53,38 +53,39 @@ struct DigitalPort {
|
||||
uint32_t PWMGeneratorID;
|
||||
};
|
||||
|
||||
// XXX: Set these back to static once we figure out the memory clobbering issue
|
||||
// Create a mutex to protect changes to the digital output values
|
||||
priority_recursive_mutex digitalDIOMutex;
|
||||
static priority_recursive_mutex digitalDIOMutex;
|
||||
// Create a mutex to protect changes to the relay values
|
||||
priority_recursive_mutex digitalRelayMutex;
|
||||
static priority_recursive_mutex digitalRelayMutex;
|
||||
// Create a mutex to protect changes to the DO PWM config
|
||||
priority_recursive_mutex digitalPwmMutex;
|
||||
priority_recursive_mutex digitalI2COnBoardMutex;
|
||||
priority_recursive_mutex digitalI2CMXPMutex;
|
||||
static priority_recursive_mutex digitalPwmMutex;
|
||||
static priority_recursive_mutex digitalI2COnBoardMutex;
|
||||
static priority_recursive_mutex digitalI2CMXPMutex;
|
||||
|
||||
tDIO* digitalSystem = NULL;
|
||||
tRelay* relaySystem = NULL;
|
||||
tPWM* pwmSystem = NULL;
|
||||
hal::Resource *DIOChannels = NULL;
|
||||
hal::Resource *DO_PWMGenerators = NULL;
|
||||
hal::Resource *PWMChannels = NULL;
|
||||
static tDIO* digitalSystem = NULL;
|
||||
static tRelay* relaySystem = NULL;
|
||||
static tPWM* pwmSystem = NULL;
|
||||
static hal::Resource *DIOChannels = NULL;
|
||||
static hal::Resource *DO_PWMGenerators = NULL;
|
||||
static hal::Resource *PWMChannels = NULL;
|
||||
|
||||
bool digitalSystemsInitialized = false;
|
||||
static bool digitalSystemsInitialized = false;
|
||||
|
||||
uint8_t i2COnboardObjCount = 0;
|
||||
uint8_t i2CMXPObjCount = 0;
|
||||
uint8_t i2COnBoardHandle = 0;
|
||||
uint8_t i2CMXPHandle = 0;
|
||||
static uint8_t i2COnboardObjCount = 0;
|
||||
static uint8_t i2CMXPObjCount = 0;
|
||||
static uint8_t i2COnBoardHandle = 0;
|
||||
static uint8_t i2CMXPHandle = 0;
|
||||
|
||||
int32_t m_spiCS0Handle = 0;
|
||||
int32_t m_spiCS1Handle = 0;
|
||||
int32_t m_spiCS2Handle = 0;
|
||||
int32_t m_spiCS3Handle = 0;
|
||||
int32_t m_spiMXPHandle = 0;
|
||||
priority_recursive_mutex spiOnboardSemaphore;
|
||||
priority_recursive_mutex spiMXPSemaphore;
|
||||
tSPI *spiSystem;
|
||||
static int32_t m_spiCS0Handle = 0;
|
||||
static int32_t m_spiCS1Handle = 0;
|
||||
static int32_t m_spiCS2Handle = 0;
|
||||
static int32_t m_spiCS3Handle = 0;
|
||||
static int32_t m_spiMXPHandle = 0;
|
||||
static priority_recursive_mutex spiOnboardSemaphore;
|
||||
static priority_recursive_mutex spiMXPSemaphore;
|
||||
static tSPI *spiSystem;
|
||||
|
||||
extern "C" {
|
||||
|
||||
struct SPIAccumulator {
|
||||
void* notifier = nullptr;
|
||||
@@ -805,7 +806,7 @@ void setCounterAverageSize(void* counter_pointer, int32_t size, int32_t *status)
|
||||
* If it's an analog trigger, determine the module from the high order routing channel
|
||||
* else do normal digital input remapping based on pin number (MXP)
|
||||
*/
|
||||
void remapDigitalSource(bool analogTrigger, uint32_t &pin, uint8_t &module) {
|
||||
extern "C++" void remapDigitalSource(bool analogTrigger, uint32_t &pin, uint8_t &module) {
|
||||
if (analogTrigger) {
|
||||
module = pin >> 4;
|
||||
} else {
|
||||
@@ -1492,7 +1493,7 @@ void spiSetHandle(uint8_t port, int32_t handle){
|
||||
* @param port The number of the port to use. 0-3 for Onboard CS0-CS2, 4 for MXP
|
||||
* @return The semaphore for the SPI port.
|
||||
*/
|
||||
priority_recursive_mutex& spiGetSemaphore(uint8_t port) {
|
||||
extern "C++" priority_recursive_mutex& spiGetSemaphore(uint8_t port) {
|
||||
if(port < 4)
|
||||
return spiOnboardSemaphore;
|
||||
else
|
||||
@@ -1872,3 +1873,5 @@ void i2CClose(uint8_t port) {
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -29,6 +29,8 @@ static uint32_t timeEpoch = 0;
|
||||
static uint32_t prevFPGATime = 0;
|
||||
static void* rolloverNotifier = nullptr;
|
||||
|
||||
extern "C" {
|
||||
|
||||
void* getPort(uint8_t pin)
|
||||
{
|
||||
Port* port = new Port();
|
||||
@@ -366,3 +368,5 @@ void imaqGetLastError()
|
||||
void niTimestamp64()
|
||||
{
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -9,6 +9,8 @@ struct Interrupt // FIXME: why is this internal?
|
||||
tInterruptManager *manager;
|
||||
};
|
||||
|
||||
extern "C" {
|
||||
|
||||
void* initializeInterrupts(uint32_t interruptIndex, bool watcher, int32_t *status)
|
||||
{
|
||||
Interrupt* anInterrupt = new Interrupt();
|
||||
@@ -121,3 +123,5 @@ void setInterruptUpSourceEdge(void* interrupt_pointer, bool risingEdge, bool fal
|
||||
anInterrupt->anInterrupt->writeConfig_RisingEdge(risingEdge, status);
|
||||
anInterrupt->anInterrupt->writeConfig_FallingEdge(fallingEdge, status);
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -59,6 +59,8 @@ static void cleanupNotifierAtExit() {
|
||||
notifierManager = nullptr;
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
void* initializeNotifier(void (*process)(uint64_t, void*), void *param, int32_t *status)
|
||||
{
|
||||
if (!process) {
|
||||
@@ -154,3 +156,5 @@ void stopNotifierAlarm(void* notifier_pointer, int32_t *status)
|
||||
Notifier* notifier = (Notifier*)notifier_pointer;
|
||||
notifier->triggerTime = UINT64_MAX;
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -6,6 +6,8 @@ static const int NUM_MODULE_NUMBERS = 63;
|
||||
|
||||
static PDP *pdp[NUM_MODULE_NUMBERS] = { NULL };
|
||||
|
||||
extern "C" {
|
||||
|
||||
void initializePDP(uint8_t module) {
|
||||
if(!pdp[module]) {
|
||||
pdp[module] = new PDP(module);
|
||||
@@ -68,4 +70,4 @@ void clearPDPStickyFaults(uint8_t module, int32_t *status) {
|
||||
*status = pdp[module]->ClearStickyFaults();
|
||||
}
|
||||
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -9,6 +9,8 @@ static void initializePower(int32_t *status) {
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
/**
|
||||
* Get the roboRIO input voltage
|
||||
*/
|
||||
@@ -125,3 +127,5 @@ int getUserCurrentFaults3V3(int32_t *status) {
|
||||
initializePower(status);
|
||||
return (int)power->readFaultCounts_OverCurrentFaultCount3V3(status);
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -9,6 +9,8 @@ TLogLevel semaphoreLogLevel = logDEBUG;
|
||||
if (level > semaphoreLogLevel) ; \
|
||||
else Log().Get(level)
|
||||
|
||||
extern "C" {
|
||||
|
||||
MUTEX_ID initializeMutexNormal() { return new priority_mutex; }
|
||||
|
||||
void deleteMutex(MUTEX_ID sem) { delete sem; }
|
||||
@@ -40,3 +42,5 @@ void takeMultiWait(MULTIWAIT_ID cond, MUTEX_ID m) {
|
||||
}
|
||||
|
||||
void giveMultiWait(MULTIWAIT_ID cond) { cond->notify_all(); }
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -2,8 +2,10 @@
|
||||
#include "visa/visa.h"
|
||||
|
||||
|
||||
uint32_t m_resourceManagerHandle;
|
||||
uint32_t m_portHandle[2];
|
||||
static uint32_t m_resourceManagerHandle;
|
||||
static uint32_t m_portHandle[2];
|
||||
|
||||
extern "C" {
|
||||
|
||||
void serialInitializePort(uint8_t port, int32_t *status) {
|
||||
char const * portName;
|
||||
@@ -144,5 +146,5 @@ void serialClose(uint8_t port, int32_t *status) {
|
||||
if(*status > 0)
|
||||
*status = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
static const int NUM_MODULE_NUMBERS = 63;
|
||||
|
||||
PCM *modules[NUM_MODULE_NUMBERS] = { NULL };
|
||||
PCM *PCM_modules[NUM_MODULE_NUMBERS] = { NULL };
|
||||
|
||||
struct solenoid_port_t {
|
||||
PCM *module;
|
||||
@@ -17,17 +17,19 @@ struct solenoid_port_t {
|
||||
};
|
||||
|
||||
void initializePCM(int module) {
|
||||
if(!modules[module]) {
|
||||
modules[module] = new PCM(module);
|
||||
if(!PCM_modules[module]) {
|
||||
PCM_modules[module] = new PCM(module);
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
void* initializeSolenoidPort(void *port_pointer, int32_t *status) {
|
||||
Port* port = (Port*) port_pointer;
|
||||
initializePCM(port->module);
|
||||
|
||||
solenoid_port_t *solenoid_port = new solenoid_port_t;
|
||||
solenoid_port->module = modules[port->module];
|
||||
solenoid_port->module = PCM_modules[port->module];
|
||||
solenoid_port->pin = port->pin;
|
||||
|
||||
return solenoid_port;
|
||||
@@ -95,3 +97,5 @@ void clearAllPCMStickyFaults_sol(void *solenoid_port_pointer, int32_t *status){
|
||||
|
||||
*status = port->module->ClearStickyFaults();
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
|
||||
#include <signal.h>
|
||||
|
||||
extern "C" {
|
||||
|
||||
STATUS verifyTaskID(TASK task) {
|
||||
if (task != nullptr && pthread_kill(*task, 0) == 0) {
|
||||
return OK;
|
||||
@@ -49,3 +51,5 @@ STATUS getTaskPriority(TASK task, int* priority) {
|
||||
return ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
const int32_t HAL_NO_WAIT = 0;
|
||||
const int32_t HAL_WAIT_FOREVER = -1;
|
||||
|
||||
extern "C" {
|
||||
|
||||
void delayTicks(int32_t ticks)
|
||||
{
|
||||
struct timespec test, remaining;
|
||||
@@ -42,3 +44,5 @@ void delaySeconds(double s)
|
||||
test = remaining;
|
||||
}
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
#include "FRC_NetworkCommunication/FRCComm.h"
|
||||
#include <cstring>
|
||||
|
||||
extern "C" {
|
||||
|
||||
int HALGetControlWord(HALControlWord *data)
|
||||
{
|
||||
return FRC_NetworkCommunication_getControlWord((ControlWord_t*) data);
|
||||
@@ -126,3 +128,5 @@ void HALNetworkCommunicationObserveUserProgramTest(void)
|
||||
{
|
||||
FRC_NetworkCommunication_observeUserProgramTest();
|
||||
}
|
||||
|
||||
} // extern "C"
|
||||
|
||||
Reference in New Issue
Block a user