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:
Peter Johnson
2018-09-03 16:08:07 -07:00
committed by GitHub
parent 67b1c85315
commit c0ff6198b3
65 changed files with 1305 additions and 7639 deletions

View File

@@ -62,7 +62,7 @@ HAL_AnalogOutputHandle HAL_InitializeAnalogOutputPort(HAL_PortHandle portHandle,
port->channel = static_cast<uint8_t>(channel);
// Initialize sim analog input
SimAnalogOutData[channel].SetInitialized(true);
SimAnalogOutData[channel].initialized = true;
return handle;
}
@@ -71,7 +71,7 @@ void HAL_FreeAnalogOutputPort(HAL_AnalogOutputHandle analogOutputHandle) {
auto port = analogOutputHandles->Get(analogOutputHandle);
if (port == nullptr) return;
analogOutputHandles->Free(analogOutputHandle);
SimAnalogOutData[port->channel].SetInitialized(false);
SimAnalogOutData[port->channel].initialized = false;
}
HAL_Bool HAL_CheckAnalogOutputChannel(int32_t channel) {
@@ -86,7 +86,7 @@ void HAL_SetAnalogOutput(HAL_AnalogOutputHandle analogOutputHandle,
return;
}
SimAnalogOutData[port->channel].SetVoltage(voltage);
SimAnalogOutData[port->channel].voltage = voltage;
}
double HAL_GetAnalogOutput(HAL_AnalogOutputHandle analogOutputHandle,
@@ -97,6 +97,6 @@ double HAL_GetAnalogOutput(HAL_AnalogOutputHandle analogOutputHandle,
return 0.0;
}
return SimAnalogOutData[port->channel].GetVoltage();
return SimAnalogOutData[port->channel].voltage;
}
} // extern "C"