ADD mail box for pedal device
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user