-
Notifications
You must be signed in to change notification settings - Fork 0
/
localBroadcast.cpp
56 lines (42 loc) · 1.57 KB
/
localBroadcast.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "localBroadcast.hpp"
localBroadcast::localBroadcast(UDP *udp, uint16_t port, uint16_t maxPacketSize)
{
this->localPort = port;
this->Udp = udp;
this->packetSizeLimit = maxPacketSize;
}
void localBroadcast::begin()
{
this->Udp->begin(this->localPort);
}
void localBroadcast::setLoopFunction(void (*receivedInterruptFunction)(char *receivedData, uint16_t receivedDataLength))
{
this->receivedInterruptFunction = receivedInterruptFunction;
}
uint8_t localBroadcast::loop(void (*receivedInterruptFunction)(char *receivedData, uint16_t receivedDataLength))
{
if (receivedInterruptFunction != nullptr)
this->receivedInterruptFunction = receivedInterruptFunction;
if (this->receivedInterruptFunction == nullptr)
return 3; // Error: No interrupt function set
uint32_t packetSize = Udp->parsePacket();
if (!packetSize)
return 0; // No packet received
if (packetSize + 1 > packetSizeLimit)
return 1; // Error: Packet size is bigger than packet size limit
char *incomingPacket = (char *)malloc(packetSize + 1);
if (incomingPacket == NULL)
return 2; // Error: Memory allocation failed
uint16_t len = Udp->read(incomingPacket, packetSize);
if (len > 0)
incomingPacket[len] = 0;
this->receivedInterruptFunction(incomingPacket, packetSize);
free(incomingPacket);
return 0; // No error
}
void localBroadcast::send(char *data, uint16_t dataLength)
{
Udp->beginPacket(IPAddress(255, 255, 255, 255), this->localPort);
Udp->write((uint8_t *)data, dataLength);
Udp->endPacket();
}