|
8 | 8 | #if defined(ESP8266) // ESP8266 |
9 | 9 | #include <ESP8266WiFi.h> |
10 | 10 | #endif |
11 | | - |
| 11 | + |
| 12 | +#define UDPSOUND_MAX_PACKET 96 // max packet size for audiosync, with a bit of "headroom" |
| 13 | +uint8_t fftUdpBuffer[UDPSOUND_MAX_PACKET+1] = { 0 }; // static buffer for receiving |
| 14 | + |
12 | 15 | static bool isValidUdpSyncVersion(const char *header) { |
13 | 16 | return strncmp_P(header, PSTR(UDP_SYNC_HEADER), 6) == 0; |
14 | 17 | } |
@@ -44,30 +47,26 @@ bool WLEDSync::read() // check & process new data. return TRUE in case that ne |
44 | 47 | bool haveFreshData = false; |
45 | 48 |
|
46 | 49 | size_t packetSize = fftUdp.parsePacket(); |
47 | | - if (packetSize > 5) { |
| 50 | + if ((packetSize > 0) && ((packetSize < 5) || (packetSize > UDPSOUND_MAX_PACKET))) fftUdp.flush(); // discard invalid packets (too small or too big) |
| 51 | + if ((packetSize > 5) && (packetSize <= UDPSOUND_MAX_PACKET)) { |
48 | 52 | //DEBUGSR_PRINTLN("Received UDP Sync Packet"); |
49 | | - uint8_t fftBuff[packetSize]; |
50 | | - fftUdp.read(fftBuff, packetSize); |
| 53 | + fftUdp.read(fftUdpBuffer, packetSize); |
51 | 54 |
|
52 | 55 | // VERIFY THAT THIS IS A COMPATIBLE PACKET |
53 | | - if (packetSize == sizeof(audioSyncPacket) && (isValidUdpSyncVersion((const char *)fftBuff))) { |
54 | | - WLEDSync::decodeAudioData(packetSize, fftBuff); |
| 56 | + if (packetSize == sizeof(audioSyncPacket) && (isValidUdpSyncVersion((const char *)fftUdpBuffer))) { |
| 57 | + decodeAudioData(packetSize, fftUdpBuffer); |
55 | 58 | //DEBUGSR_PRINTLN("Finished parsing UDP Sync Packet v2"); |
56 | 59 | haveFreshData = true; |
57 | 60 | receivedFormat = 2; |
58 | | - } |
59 | | - else { |
60 | | - if (packetSize == sizeof(audioSyncPacket_v1) && (isValidUdpSyncVersion_v1((const char *)fftBuff))) { |
61 | | - WLEDSync::decodeAudioData_v1(packetSize, fftBuff); |
| 61 | + } else { |
| 62 | + if (packetSize == sizeof(audioSyncPacket_v1) && (isValidUdpSyncVersion_v1((const char *)fftUdpBuffer))) { |
| 63 | + decodeAudioData_v1(packetSize, fftUdpBuffer); |
62 | 64 | //DEBUGSR_PRINTLN("Finished parsing UDP Sync Packet v1"); |
63 | 65 | haveFreshData = true; |
64 | 66 | receivedFormat = 1; |
65 | 67 | } else receivedFormat = 0; // unknown format |
66 | 68 | } |
67 | 69 | } |
68 | | - else if(packetSize > 0) { |
69 | | - Serial.println("packetSize=" + packetSize); |
70 | | - } |
71 | 70 | return haveFreshData; |
72 | 71 | } |
73 | 72 |
|
|
0 commit comments