mirror of
https://github.com/Show-maket/IR-protocol.git
synced 2026-04-28 03:08:08 +00:00
dma fix priority and debug
This commit is contained in:
25
IR_Decoder.h
25
IR_Decoder.h
@ -17,6 +17,10 @@ private:
|
||||
uint16_t acceptDelay = IR_ResponseDelay;
|
||||
uint8_t acceptCustomByte;
|
||||
|
||||
bool extiEnabled_ = false;
|
||||
bool rxExtiPreemptConfigured_ = false;
|
||||
uint32_t rxExtiPreemptValue_ = 0;
|
||||
|
||||
public:
|
||||
PacketTypes::Data gotData;
|
||||
PacketTypes::DataBack gotBackData;
|
||||
@ -25,19 +29,38 @@ public:
|
||||
PacketTypes::BasePack gotRaw;
|
||||
|
||||
// IR_Decoder();
|
||||
IR_Decoder(const uint8_t pin, uint16_t addr = 0, IR_Encoder *encPair = nullptr, bool autoHandle = true);
|
||||
/** @param enableOnConstruct true — вызвать enable() из конструктора; false — отложенный enable() (NVIC и т.д.), tick — tickThis() / tick(). */
|
||||
IR_Decoder(const uint8_t pin, uint16_t addr = 0, IR_Encoder *encPair = nullptr, bool enableOnConstruct = true);
|
||||
|
||||
std::function<void()> operator()();
|
||||
|
||||
/**
|
||||
* Arduino STM32: после attachInterrupt ядро выставляет свой приоритет EXTI.
|
||||
* Если вызывали setReceiveExtiPreemptPriority(), здесь он применяется поверх (обычно нужен выше срочности, чем DMA ИК-TX).
|
||||
* На других платформах поведение без изменений.
|
||||
*/
|
||||
void enable();
|
||||
void disable();
|
||||
|
||||
#if defined(ARDUINO_ARCH_STM32) && !defined(HAL_EXTI_MODULE_DISABLED)
|
||||
/**
|
||||
* Задать preempt-приоритет NVIC для EXTI линии этого пина (тот же смысл, что второй аргумент CMSIS NVIC_SetPriority).
|
||||
* Вызывайте до или после enable(); при активном приёме применяется сразу.
|
||||
* При использовании DMA на передачу ИК preempt приёма должен быть меньше, чем у DMA TX (выше срочность прерывания).
|
||||
*/
|
||||
void setReceiveExtiPreemptPriority(uint32_t preempt);
|
||||
#endif
|
||||
|
||||
bool isReceive(uint8_t type);
|
||||
|
||||
~IR_Decoder();
|
||||
|
||||
/** Обойти все экземпляры из внутреннего списка и вызвать tick у каждого. */
|
||||
static void tick();
|
||||
|
||||
/** Tick только этого декодера (без обхода списка). Не комбинируйте с static tick() для того же экземпляра. */
|
||||
void tickThis() { _tick(); }
|
||||
|
||||
inline void setAcceptDelay(uint16_t acceptDelay)
|
||||
{
|
||||
this->acceptDelay = acceptDelay;
|
||||
|
||||
Reference in New Issue
Block a user