работает с перемычкой на 1МГц 2%
This commit is contained in:
@@ -130,11 +130,12 @@ bool IRAM_ATTR PulseReceiver::onRmt(rmt_channel_handle_t, const rmt_rx_done_even
|
||||
return wake == pdTRUE;
|
||||
}
|
||||
|
||||
bool PulseReceiver::nextRmtEdge(Edge &edge) {
|
||||
bool PulseReceiver::nextRmtEdge(Edge &edge, TickType_t waitTicks) {
|
||||
for (;;) {
|
||||
if (blockIndex_ >= block_.count) {
|
||||
if (xQueueReceive(queue_, &block_, 0) != pdTRUE) return false;
|
||||
if (xQueueReceive(queue_, &block_, waitTicks) != pdTRUE) return false;
|
||||
blockIndex_ = 0; phase_ = 0;
|
||||
waitTicks = 0;
|
||||
}
|
||||
const rmt_symbol_word_t &s = block_.symbols[blockIndex_];
|
||||
const bool nextLevel = phase_ == 0 ? s.level0 : s.level1;
|
||||
@@ -151,10 +152,10 @@ bool PulseReceiver::nextRmtEdge(Edge &edge) {
|
||||
}
|
||||
}
|
||||
|
||||
size_t PulseReceiver::readPeriods(PulsePeriod *periods, size_t capacity) {
|
||||
size_t PulseReceiver::readPeriods(PulsePeriod *periods, size_t capacity, TickType_t waitTicks) {
|
||||
size_t count = 0;
|
||||
Edge e;
|
||||
while (count < capacity && nextRmtEdge(e))
|
||||
while (count < capacity && nextRmtEdge(e, count ? 0 : waitTicks))
|
||||
if (consumeEdge(e, periods[count])) ++count;
|
||||
return count;
|
||||
}
|
||||
@@ -170,10 +171,10 @@ void IRAM_ATTR PulseReceiver::onGpio(void *ctx) {
|
||||
if (wake) portYIELD_FROM_ISR();
|
||||
}
|
||||
|
||||
size_t PulseReceiver::readPeriods(PulsePeriod *periods, size_t capacity) {
|
||||
size_t PulseReceiver::readPeriods(PulsePeriod *periods, size_t capacity, TickType_t waitTicks) {
|
||||
size_t count = 0;
|
||||
Edge e;
|
||||
while (count < capacity && xQueueReceive(queue_, &e, 0) == pdTRUE)
|
||||
while (count < capacity && xQueueReceive(queue_, &e, count ? 0 : waitTicks) == pdTRUE)
|
||||
if (consumeEdge(e, periods[count])) ++count;
|
||||
return count;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user