mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-20 00:51:42 +00:00
Change hal sim to use spinlocks (#1291)
This makes callback registration completely thread safe. This patch also uses templates and macros to dramatically reduce the amount of manual boilerplate.
This commit is contained in:
@@ -50,8 +50,8 @@ HAL_AnalogInputHandle HAL_InitializeAnalogInputPort(HAL_PortHandle portHandle,
|
||||
analog_port->isAccumulator = false;
|
||||
}
|
||||
|
||||
SimAnalogInData[channel].SetInitialized(true);
|
||||
SimAnalogInData[channel].SetAccumulatorInitialized(false);
|
||||
SimAnalogInData[channel].initialized = true;
|
||||
SimAnalogInData[channel].accumulatorInitialized = false;
|
||||
|
||||
return handle;
|
||||
}
|
||||
@@ -60,8 +60,8 @@ void HAL_FreeAnalogInputPort(HAL_AnalogInputHandle analogPortHandle) {
|
||||
// no status, so no need to check for a proper free.
|
||||
analogInputHandles->Free(analogPortHandle);
|
||||
if (port == nullptr) return;
|
||||
SimAnalogInData[port->channel].SetInitialized(false);
|
||||
SimAnalogInData[port->channel].SetAccumulatorInitialized(false);
|
||||
SimAnalogInData[port->channel].initialized = false;
|
||||
SimAnalogInData[port->channel].accumulatorInitialized = false;
|
||||
}
|
||||
|
||||
HAL_Bool HAL_CheckAnalogModule(int32_t module) { return module == 1; }
|
||||
@@ -82,7 +82,7 @@ void HAL_SetAnalogAverageBits(HAL_AnalogInputHandle analogPortHandle,
|
||||
return;
|
||||
}
|
||||
|
||||
SimAnalogInData[port->channel].SetAverageBits(bits);
|
||||
SimAnalogInData[port->channel].averageBits = bits;
|
||||
}
|
||||
int32_t HAL_GetAnalogAverageBits(HAL_AnalogInputHandle analogPortHandle,
|
||||
int32_t* status) {
|
||||
@@ -92,7 +92,7 @@ int32_t HAL_GetAnalogAverageBits(HAL_AnalogInputHandle analogPortHandle,
|
||||
return 0;
|
||||
}
|
||||
|
||||
return SimAnalogInData[port->channel].GetAverageBits();
|
||||
return SimAnalogInData[port->channel].averageBits;
|
||||
}
|
||||
void HAL_SetAnalogOversampleBits(HAL_AnalogInputHandle analogPortHandle,
|
||||
int32_t bits, int32_t* status) {
|
||||
@@ -102,7 +102,7 @@ void HAL_SetAnalogOversampleBits(HAL_AnalogInputHandle analogPortHandle,
|
||||
return;
|
||||
}
|
||||
|
||||
SimAnalogInData[port->channel].SetOversampleBits(bits);
|
||||
SimAnalogInData[port->channel].oversampleBits = bits;
|
||||
}
|
||||
int32_t HAL_GetAnalogOversampleBits(HAL_AnalogInputHandle analogPortHandle,
|
||||
int32_t* status) {
|
||||
@@ -112,7 +112,7 @@ int32_t HAL_GetAnalogOversampleBits(HAL_AnalogInputHandle analogPortHandle,
|
||||
return 0;
|
||||
}
|
||||
|
||||
return SimAnalogInData[port->channel].GetOversampleBits();
|
||||
return SimAnalogInData[port->channel].oversampleBits;
|
||||
}
|
||||
int32_t HAL_GetAnalogValue(HAL_AnalogInputHandle analogPortHandle,
|
||||
int32_t* status) {
|
||||
@@ -122,7 +122,7 @@ int32_t HAL_GetAnalogValue(HAL_AnalogInputHandle analogPortHandle,
|
||||
return 0;
|
||||
}
|
||||
|
||||
double voltage = SimAnalogInData[port->channel].GetVoltage();
|
||||
double voltage = SimAnalogInData[port->channel].voltage;
|
||||
return HAL_GetAnalogVoltsToValue(analogPortHandle, voltage, status);
|
||||
}
|
||||
int32_t HAL_GetAnalogAverageValue(HAL_AnalogInputHandle analogPortHandle,
|
||||
@@ -154,7 +154,7 @@ double HAL_GetAnalogVoltage(HAL_AnalogInputHandle analogPortHandle,
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
return SimAnalogInData[port->channel].GetVoltage();
|
||||
return SimAnalogInData[port->channel].voltage;
|
||||
}
|
||||
double HAL_GetAnalogAverageVoltage(HAL_AnalogInputHandle analogPortHandle,
|
||||
int32_t* status) {
|
||||
@@ -165,8 +165,7 @@ double HAL_GetAnalogAverageVoltage(HAL_AnalogInputHandle analogPortHandle,
|
||||
}
|
||||
|
||||
// No averaging supported
|
||||
double voltage = SimAnalogInData[port->channel].GetVoltage();
|
||||
return voltage;
|
||||
return SimAnalogInData[port->channel].voltage;
|
||||
}
|
||||
int32_t HAL_GetAnalogLSBWeight(HAL_AnalogInputHandle analogPortHandle,
|
||||
int32_t* status) {
|
||||
|
||||
Reference in New Issue
Block a user