ADD mail box for pedal device

This commit is contained in:
fastium
2025-01-03 17:10:42 +01:00
parent 946e86025c
commit 95e92e2564
5 changed files with 227 additions and 125 deletions

View File

@@ -36,21 +36,19 @@
namespace multi_tasking {
PedalDevice::PedalDevice(Callback<void()> cbOnLeft, Callback<void()> cbOnRight) {
disco::Joystick::getInstance().setLeftCallback(callback(cbOnLeft));
disco::Joystick::getInstance().setRightCallback(callback(cbOnRight));
}
PedalDevice::PedalDevice(Mail<uint32_t, 16>* mailBox) {
disco::Joystick::getInstance().setLeftCallback(callback(this, &PedalDevice::onLeft));
disco::Joystick::getInstance().setRightCallback(
callback(this, &PedalDevice::onRight));
std::chrono::milliseconds PedalDevice::getCurrentRotationTime() {
uint32_t currentStep = core_util_atomic_load_u32(&_currentStep);
return bike_computer::kMinPedalRotationTime +
currentStep * bike_computer::kDeltaPedalRotationTime;
_mailBox = mailBox;
}
void PedalDevice::increaseRotationSpeed() {
uint32_t currentStep = core_util_atomic_load_u32(&_currentStep);
if (currentStep > 0) {
core_util_atomic_decr_u32(&_currentStep, 1);
sendMail(--currentStep);
}
}
@@ -58,6 +56,7 @@ void PedalDevice::decreaseRotationSpeed() {
uint32_t currentStep = core_util_atomic_load_u32(&_currentStep);
if (currentStep < bike_computer::kNbrOfSteps) {
core_util_atomic_incr_u32(&_currentStep, 1);
sendMail(++currentStep);
}
}
@@ -65,4 +64,19 @@ void PedalDevice::onLeft() { decreaseRotationSpeed(); }
void PedalDevice::onRight() { increaseRotationSpeed(); }
void PedalDevice::sendMail(uint32_t data) {
uint32_t* currentStep = _mailBox->try_alloc();
if (currentStep != nullptr) {
*currentStep = data;
(*_mailBox).put(currentStep);
}
}
// mbed_build_and_runstatic methods
std::chrono::milliseconds PedalDevice::getCurrentRotationTime(uint32_t step) {
return bike_computer::kMinPedalRotationTime +
step * bike_computer::kDeltaPedalRotationTime;
}
} // namespace multi_tasking