migrate callbacks from std::vector to std::map
This commit is contained in:
parent
c635427d64
commit
5f6e586945
11 changed files with 143 additions and 178 deletions
|
@ -5,6 +5,7 @@ DigitalInputCard::DigitalInputCard(uint8_t address_a, uint8_t address_b) : callb
|
|||
{
|
||||
this->address_a = address_a;
|
||||
this->address_b = address_b;
|
||||
this->callbacks_handler_index = 0;
|
||||
}
|
||||
// Instantiate the card with the specified position on the dip switch
|
||||
// Bit 0,1,2 are for bank A
|
||||
|
@ -95,8 +96,8 @@ void DigitalInputCard::handlePinChange(int pin, uint8_t ¤tBuffer, uint8_t
|
|||
{
|
||||
lastDebounceTime[pin] = millis();
|
||||
previousBuffer ^= (-((currentBuffer >> (7 - pin)) & 1) ^ previousBuffer) & (1UL << (7 - pin));
|
||||
for (int i = 0; i < callbacks.size(); i++)
|
||||
callbacks[i](virtualPin, ((currentBuffer >> (7 - pin)) & 1));
|
||||
for(const auto& callback : callbacks)
|
||||
callback.second(virtualPin, ((currentBuffer >> (7 - pin)) & 1));
|
||||
}
|
||||
}
|
||||
// Handle Bank B
|
||||
|
@ -106,8 +107,8 @@ void DigitalInputCard::handlePinChange(int pin, uint8_t ¤tBuffer, uint8_t
|
|||
{
|
||||
lastDebounceTime[pin] = millis();
|
||||
previousBuffer ^= (-((currentBuffer >> (15 - pin)) & 1) ^ previousBuffer) & (1UL << (15 - pin));
|
||||
for (int i = 0; i < callbacks.size(); i++)
|
||||
callbacks[i](virtualPin, ((currentBuffer >> (15 - pin)) & 1));
|
||||
for (const auto& callback : callbacks)
|
||||
callback.second(virtualPin, ((currentBuffer >> (15 - pin)) & 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -158,9 +159,7 @@ uint8_t DigitalInputCard::getInputBufferB()
|
|||
// Register a callback function to be called when a pin changes
|
||||
void DigitalInputCard::registerCallback(std::function<void(uint8_t, bool)> callback)
|
||||
{
|
||||
ESP_LOGD("DigitalInputCard", "Registering callback");
|
||||
callbacks.push_back(callback);
|
||||
ESP_LOGD("DigitalInputCard", "Callback registered");
|
||||
callbacks[this->callbacks_handler_index++] = callback;
|
||||
}
|
||||
|
||||
// Refresh the input buffer for bank A
|
||||
|
@ -180,17 +179,10 @@ void DigitalInputCard::setDebounceTime(uint8_t pin, uint32_t debounceTime)
|
|||
this->debounceTime[pin] = debounceTime;
|
||||
}
|
||||
|
||||
// void DigitalInputCard::unregisterCallback(std::function<void(uint8_t, bool)> callback)
|
||||
// {
|
||||
// for (int i = 0; i < callbacks.size(); i++)
|
||||
// {
|
||||
// if (callbacks[i].target<void(uint8_t, bool)>() == callback.target<void(uint8_t, bool)>())
|
||||
// {
|
||||
// callbacks.erase(callbacks.begin() + i);
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
void DigitalInputCard::unregisterCallback(uint8_t handler)
|
||||
{
|
||||
callbacks.erase(handler);
|
||||
}
|
||||
|
||||
void DigitalInputCard::loadPinMap(uint8_t pinMap[16])
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue