// // UDP stuff // void sendUDPmessage( String msg, int port = 5100 ) { IPAddress multicast( 225, 1, 1, 1 ); UDP server; if ( server.begin( port ) ) { server.beginPacket( multicast, port ); server.write( msg ); server.endPacket(); server.stop(); } }
void openSocket() { udp.stop(); // Get OpenThread interface index (OpenThread interface is named "th1" on all Mesh devices) uint8_t idx = 0; if_name_to_index("th1", &idx); Log.trace("th1 index = %u", idx); // Create UDP socket and bind to OpenThread interface auto ur = udp.begin(PORT, idx); Log.trace("UDP.begin() = %u", ur); // Subscribe to ff03::1:1001 HAL_IPAddress addr = {}; addr.v = 6; inet_inet_pton(AF_INET6, MULTICAST_ADDR, addr.ipv6); mcastAddr = addr; int r = udp.joinMulticast(mcastAddr); Log.trace("Subscribed to %s: %d", MULTICAST_ADDR, r); }
int WolClient::wake(const char* mac) { uint8_t contents[MAGIC_HEADER_LENGTH + REPEAT_MAC * MAC_BYTES]; uint8_t rawMac[MAC_BYTES]; parseMacAddress(mac, rawMac); UDP udp; udp.begin(port); udp.beginPacket(broadcastIP, port); for (int i = 0; i < MAGIC_HEADER_LENGTH; i++) { contents[i] = 0xFF; } for (uint8_t i = MAGIC_HEADER_LENGTH; i < sizeof contents; i++) { contents[i] = rawMac[(i - MAGIC_HEADER_LENGTH) % MAC_BYTES]; } udp.write(contents, sizeof contents); udp.endPacket(); udp.stop(); return TRUE; }