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:
Peter Johnson
2015-11-26 00:08:32 -08:00
parent e2ec34090a
commit 351e8599ac
15 changed files with 105 additions and 50 deletions

View File

@@ -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"