#include "AudioPlayMemoryRaw.h"
#include <NativeEthernet.h>
#include <NativeEthernetUdp.h>
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SerialFlash.h>
AudioPlayMemoryRaw rawPlayer;
AudioOutputI2S headPhones;
AudioConnection patchCord1(rawPlayer, 0, headPhones, 0);
AudioConnection patchCord2(rawPlayer, 0, headPhones, 1);
AudioControlSGTL5000 sgtl5000_1;
IPAddress MY_IP(192, 168, 1, 223);
EthernetUDP UDP;
byte MYMAC[6];
const int PORT = 1153;
long lastPacketNumber = 0;
void setup()
{
Serial.begin(115200);
AudioMemory(30);
digitalWrite(13, OUTPUT);
LEDOn();
sgtl5000_1.enable();
sgtl5000_1.volume(0.5);
SetupEthernet();
LEDOff();
rawPlayer.play(UDP, PORT);
}
void loop()
{
Read();
}
void LEDOn()
{
digitalWrite(13, HIGH);
}
void LEDOff()
{
digitalWrite(13, LOW);
}
void LEDError()
{
while (true)
{
LEDOff();
delay(500);
LEDOn();
}
}
void Read()
{
int packetsize = UDP.parsePacket();
int16_t packet[AUDIO_BLOCK_SAMPLES];
if (packetsize)
{
uint8_t packetHeader = 0x00;
long packetNumber = 0;
packetHeader = UDP.read();
UDP.read((uint8_t*)&packetNumber, sizeof(long));
UDP.read((uint8_t*)&packet, AUDIO_BLOCK_SAMPLES * 2);
if (lastPacketNumber > packetNumber)
{
Serial.printf("%d - Out of order", packetNumber);
}
if (packetNumber != (lastPacketNumber + 1))
{
Serial.printf("%d - Packet dropped", packetNumber);
}
lastPacketNumber = packetNumber;
rawPlayer.enqueue(packet);
UDP.flush();
}
}
void SetupEthernet()
{
TeensyMAC(MYMAC);
Ethernet.begin(MYMAC, MY_IP);
Serial.println("Checking ethernet hardware");
if (Ethernet.hardwareStatus() == EthernetNoHardware)
{
Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :(");
LEDError();
}
Serial.println("Checking ethernet link");
if (Ethernet.linkStatus() == LinkOFF)
{
Serial.println("Ethernet cable is not connected.");
LEDError();
}
UDP.begin(PORT);
}
void TeensyMAC(uint8_t* mac)
{
for (uint8_t by = 0; by < 2; by++) mac[by] = (HW_OCOTP_MAC1 >> ((1 - by) * 8)) & 0xFF;
for (uint8_t by = 0; by < 4; by++) mac[by + 2] = (HW_OCOTP_MAC0 >> ((3 - by) * 8)) & 0xFF;
Serial.printf("MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
}