bool initCommunication() { WiFi.persistent(false); bool ok = WifiEspNowBroadcast.begin("CO-WARN", 3); if (!ok) { LOG("WifiEspNowBroadcast.begin() failed"); return false; } WifiEspNowBroadcast.onReceive(processRx, nullptr); LOG("MAC address of this node is %s", WiFi.softAPmacAddress().c_str()); return true; } /* process wifi stack Rx interrupt */ ICACHE_RAM_ATTR void processRx(const uint8_t mac[6], const uint8_t* buf, size_t count, void* cbarg) { //simple frame size check if (count != sizeof(receiveBuffer[rxCounter])) { return; } else { receiveBuffer[rxCounter] = *(rm370*)buf; //memcpy(&receiveBuffer[rxCounter].originMAC[0], &mac, sizeof(receiveBuffer[rxCounter].originMAC)); //dont overwrite original package //shift ring buffer input pointer if (rxCounter + 1 < MAX_PEERS) { rxCounter++; } else { rxCounter = 0; } } LOG("[%02d] Message from %02X:%02X:%02X:%02X:%02X:%02X", rxCounter, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); } /* */ void checkMessage() { if (receiveBuffer[rxHandlePointer].PREAMBLE1 == 'R' && receiveBuffer[rxHandlePointer].PREAMBLE2 == 'M') { LOG("Origin MAC %02X:%02X:%02X:%02X:%02X:%02X || \tStatus: %c | BatWarn: %c", receiveBuffer[rxHandlePointer].originMAC[0], receiveBuffer[rxHandlePointer].originMAC[1], receiveBuffer[rxHandlePointer].originMAC[2], receiveBuffer[rxHandlePointer].originMAC[3], receiveBuffer[rxHandlePointer].originMAC[4], receiveBuffer[rxHandlePointer].originMAC[5], receiveBuffer[rxHandlePointer].code, (receiveBuffer[rxHandlePointer].batteryWarning) ? '!' : '.'); switch (receiveBuffer[rxHandlePointer].code) { case 'r': //LOG("\tALARM received"); break; case 'y': //LOG("\tWARNING received"); break; case 'g': //LOG("\tGREEN received"); break; default: break; } if (receiveBuffer[rxHandlePointer].batteryWarning == true) { //LOG("\tBAT Warning received"); } refreshGlobalStatus = true; } else { DEBUGLOG("Payload does not contain known preamble."); } } void sendMessage() { }