void EnoceanDeviceContainer::handleTestRadioPacket(CompletedCB aCompletedCB, Esp3PacketPtr aEsp3PacketPtr, ErrorPtr aError) { // ignore packets with error if (Error::isOK(aError)) { if (aEsp3PacketPtr->eepRorg()==rorg_RPS && aEsp3PacketPtr->radioDBm()>MIN_LEARN_DBM && enoceanComm.modemAppVersion()>0) { // uninstall handler enoceanComm.setRadioPacketHandler(NULL); // seen both watchdog response (modem works) and independent RPS telegram (RF is ok) LOG(LOG_NOTICE, "- enocean modem info: appVersion=0x%08X, apiVersion=0x%08X, modemAddress=0x%08X\n", enoceanComm.modemAppVersion(), enoceanComm.modemApiVersion(), enoceanComm.modemAddress()); aCompletedCB(ErrorPtr()); // done return; } } // - still waiting LOG(LOG_NOTICE, "- enocean test: still waiting for RPS telegram in learn distance\n"); }
void EnoceanDevice::handleRadioPacket(Esp3PacketPtr aEsp3PacketPtr) { ALOG(LOG_INFO, "now starts processing EnOcean packet:\n%s", aEsp3PacketPtr->description().c_str()); lastPacketTime = MainLoop::now(); lastRSSI = aEsp3PacketPtr->radioDBm(); lastRepeaterCount = aEsp3PacketPtr->radioRepeaterCount(); // pass to every channel for (EnoceanChannelHandlerVector::iterator pos = channels.begin(); pos!=channels.end(); ++pos) { (*pos)->handleRadioPacket(aEsp3PacketPtr); } // if device cannot be updated whenever output value change is requested, send updates after receiving a message if (pendingDeviceUpdate || updateAtEveryReceive) { // send updates, if any pendingDeviceUpdate = true; // set it in case of updateAtEveryReceive (so message goes out even if no changes pending) ALOG(LOG_NOTICE, "pending output update is now sent to device"); sendOutgoingUpdate(); } }