aiie/teensy/teensy-speaker.cpp

46 lines
1022 B
C++

#include <Arduino.h>
#include "teensy-speaker.h"
#include "globals.h"
TeensySpeaker::TeensySpeaker(uint8_t pinNum) : PhysicalSpeaker()
{
toggleState = false;
speakerPin = pinNum;
pinMode(speakerPin, OUTPUT); // analog speaker output, used as digital volume control
mixerValue = numMixed = 0;
}
TeensySpeaker::~TeensySpeaker()
{
}
void TeensySpeaker::toggle(uint32_t c)
{
toggleState = !toggleState;
mixerValue = (toggleState ? 0x1FF : 0x00);
mixerValue >>= (16-g_volume);
// FIXME: glad it's DAC0 and all, but... how does that relate to the pin passed in the constructor?
analogWriteDAC0(mixerValue);
}
void TeensySpeaker::maintainSpeaker(uint32_t c, uint64_t runtimeInMicros)
{
// Nothing to do here. We can't run the speaker async, b/c not
// enough CPU time. So we run the CPU close to sync and hope that
// the direct pulsing of the speaker is reasonably close to on-time.
}
void TeensySpeaker::beginMixing()
{
// unused
}
void TeensySpeaker::mixOutput(uint8_t v)
{
// unused
}