#ifndef PWMCLASS_H
#define PWMCLASS_H
#include "system.h"
#include "oneway.h"
static constexpr unsigned HALF_LEN = 3u * 160u;
static constexpr unsigned FULL_LEN = 2u * HALF_LEN;
static constexpr unsigned MAXPWM   = 6000u;
/* Používá TIM1, PWM kanál 1, DMA1 kanál 5, přerušení DMA1_Channel5_IRQHandler */
class PwmClass {
  volatile unsigned count;
  uint16_t * const  pL;
  uint16_t * const  pH;
  uint16_t buffer [FULL_LEN];
  OneWay * src;
  public:
    explicit PwmClass () noexcept;
    void attach (OneWay & s) { src = & s; }
    void send (const bool b) {
      if (!src) return;
      if (b) src->Send (pH, HALF_LEN);
      else   src->Send (pL, HALF_LEN);
      if (count) count -= 1u;
    }
    void delay (const unsigned frames = 50u) {
      count = frames;
      while (count) {
        asm volatile ("nop");
      }
    }
};

#endif // PWMCLASS_H