aiie/teensy/teensy-speaker.cpp

55 lines
1.0 KiB
C++

#include <Arduino.h>
#include "teensy-speaker.h"
extern int16_t g_volume;
TeensySpeaker::TeensySpeaker(uint8_t pinNum) : PhysicalSpeaker()
{
toggleState = false;
needsToggle = false;
speakerPin = pinNum;
pinMode(speakerPin, OUTPUT); // analog speaker output, used as digital volume control
mixerValue = numMixed = 0;
}
TeensySpeaker::~TeensySpeaker()
{
}
void TeensySpeaker::toggle()
{
needsToggle = true;
}
void TeensySpeaker::maintainSpeaker(uint32_t c)
{
if (needsToggle) {
toggleState = !toggleState;
needsToggle = false;
}
mixerValue += (toggleState ? 0xFFF : 0x00);
// FIXME: Temporarily disabling mixer
/* numMixed += 2;
if (numMixed > 1) {
mixerValue /= numMixed;
}*/
// FIXME: glad it's DAC0 and all, but... how does that relate to the pin passed in the constructor?
analogWriteDAC0(mixerValue); // FIXME: g_volume?
}
void TeensySpeaker::beginMixing()
{
mixerValue = 0;
numMixed = 0;
}
void TeensySpeaker::mixOutput(uint8_t v)
{
mixerValue += v;
numMixed++;
}