aiie/teensy/teensy-speaker.h

35 lines
726 B
C++

#ifndef __TEENSY_SPEAKER_H
#define __TEENSY_SPEAKER_H
#include "physicalspeaker.h"
// FIXME: 64 enough?
#define SPEAKERQUEUESIZE 64
class TeensySpeaker : public PhysicalSpeaker {
public:
TeensySpeaker(uint8_t pinNum);
virtual ~TeensySpeaker();
virtual void toggle(uint32_t c);
virtual void maintainSpeaker(uint32_t c);
virtual void beginMixing();
virtual void mixOutput(uint8_t v);
private:
uint8_t speakerPin;
bool toggleState;
uint32_t mixerValue;
uint8_t numMixed;
uint32_t toggleTimes[SPEAKERQUEUESIZE];
uint8_t toggleCount; // # of entries still in queue
uint8_t toggleReadPtr; // ring buffer pointer in queue
uint8_t toggleWritePtr; // ring buffer pointer in queue
};
#endif