#include <Arduino.h>
#include <Audio.h>
#include <TeensyID.h>
#include <NativeEthernet.h>
#include <NativeEthernetUdp.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 137, 2); // local IP adress
IPAddress ipremote(192, 168, 137, 1); // remote IP adress
unsigned int localPort = 8888; // local port to listen on,to do AUTOMATE this
unsigned int remotePort = 8888; // remote port to listen on,to do AUTOMATE this
char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; // = 24, buffer to hold incoming packet,
char ReplyBuffer[] = "acknowledged"; // a string to send back, not used yet
EthernetUDP Udp; // An EthernetUDP instance to let us send and receive packets over UDP
uint8_t serial[4]; // used for Teensy serial number
bool returnbool = 0; // used for return value of codec settings, 1 = succes, 0 = error
uint8_t queue1L = 0; // used for size of queue available
uint8_t queue2L = 0; // used for size of queue available
uint8_t queue3L = 0;
uint8_t queue4L = 0;
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SD.h>
#include <SerialFlash.h>
// GUItool: begin automatically generated code
AudioControlCS42448 cs42448_1; //xy=403,424
AudioInputTDM tdm1; //xy=195,205
AudioRecordQueue queue1; //xy=449,120
AudioRecordQueue queue2; //xy=450,157
AudioRecordQueue queue3; //xy=450,198
AudioRecordQueue queue4; //xy=451,237
AudioConnection patchCord1(tdm1, 0, queue1, 0);
AudioConnection patchCord2(tdm1, 1, queue2, 0);
AudioConnection patchCord3(tdm1, 2, queue3, 0);
AudioConnection patchCord4(tdm1, 3, queue4, 0);
// GUItool: end automatically generated code
void setup() {
Serial.begin(9600); // Open serial communications and wait for port to open:
while (!Serial) { } // wait for serial port to connect. Needed for native USB port only
Serial.println("Serial port connected");
Ethernet.begin(mac, ip); // start the Ethernet
Serial.println("Ethernet started");
if (Ethernet.hardwareStatus() == EthernetNoHardware) { // Check for Ethernet hardware present
Serial.println("Ethernet shield was not found");
while (true) {
delay(10); // do nothing, no point running without Ethernet hardware
}
}
Serial.println("Ethernet hardware was found");
if (Ethernet.linkStatus() == LinkOFF) { // Check for cable connection
Serial.println("Ethernet cable is not connected.");
}
Serial.println("Ethernet cable is connected");
Udp.begin(localPort);
Serial.println("Ethernet started UDP");
teensySN(serial);
Serial.printf("Teensy USB Serial: %u \n", teensyUsbSN()); // print teensy serial, just to keep track on which teensy i am working on
AudioMemory(128); // setup DMA buffer for background DMA CODEC sample fetching
returnbool = cs42448_1.enable(); // Enable the codec
Serial.print("CS42448_1_enable: return value = ");
Serial.println(returnbool, BIN);
delay(100);
Serial.print("Settings of register 0x05: ");
Serial.println(cs42448_1.read(0x05), BIN);
delay(100);
Serial.println("Set the ADC to differential mode...");
cs42448_1.adcDifferentialMode();
delay(100);
Serial.println("Freeze the high pass filter...");
cs42448_1.adcHighPassFilterFreeze();
delay(100);
Serial.print("Settings of register 0x05: ");
Serial.println(cs42448_1.read(0x05), BIN);
delay(100);
Serial.println("set volume 1...");
cs42448_1.volume(1);
Serial.println("set inputLevel(15)...");
cs42448_1.inputLevel(15);
queue1.begin();
queue2.begin();
queue3.begin();
queue4.begin();
Serial.println("...q1,2,3 en 4 started, start fetching audio blocks");
}
char buffer[2048];
void loop() {
queue1L = queue1.available();
queue2L = queue2.available();
queue3L = queue3.available();
queue4L = queue4.available();
if ((queue1L >= 3)||(queue2L >= 3)||(queue3L >= 3)||(queue4L >= 3)) {
Serial.print("q1=");
Serial.print(queue1L);
Serial.print(", q2=");
Serial.print(queue2L);
Serial.print(", q3=");
Serial.print(queue3L);
Serial.print(", q4=");
Serial.println(queue4L);
}
if (queue1L >= 2) {
memcpy(buffer , queue1.readBuffer(), 256);
queue1.freeBuffer();
memcpy(buffer+ 256, queue1.readBuffer(), 256);
queue1.freeBuffer();
memcpy(buffer+ 512, queue2.readBuffer(), 256);
queue2.freeBuffer();
memcpy(buffer+ 768, queue2.readBuffer(), 256);
queue2.freeBuffer();
memcpy(buffer+ 1024, queue3.readBuffer(), 256);
queue3.freeBuffer();
memcpy(buffer+ 1280, queue3.readBuffer(), 256);
queue3.freeBuffer();
memcpy(buffer+ 1536, queue4.readBuffer(), 256);
queue4.freeBuffer();
memcpy(buffer+ 1792, queue4.readBuffer(), 256);
queue4.freeBuffer();
// write audio samples as CHAR to UDP
Udp.beginPacket(ipremote, remotePort);
Udp.write(buffer);
Udp.endPacket();
}
}