void DaliDeviceContainer::deviceInfoReceived(DaliBusDeviceListPtr aBusDevices, DaliBusDeviceList::iterator aNextDev, CompletedCB aCompletedCB, DaliComm::DaliDeviceInfoPtr aDaliDeviceInfoPtr, ErrorPtr aError) { bool missingData = aError && aError->isError(DaliCommError::domain(), DaliCommErrorMissingData); bool badData = aError && (aError->isError(DaliCommError::domain(), DaliCommErrorBadChecksum) || aError->isError(DaliCommError::domain(), DaliCommErrorBadDeviceInfo)); if (!aError || missingData || badData) { // no error, or error but due to missing or bad data -> device exists if (missingData) { LOG(LOG_INFO,"Device at shortAddress %d does not have device info\n",aDaliDeviceInfoPtr->shortAddress); } if (badData) { LOG(LOG_INFO,"Device at shortAddress %d does not have valid device info\n",aDaliDeviceInfoPtr->shortAddress); } // update device info entry in dali bus device (*aNextDev)->setDeviceInfo(*aDaliDeviceInfoPtr); } else { LOG(LOG_ERR,"Error reading device info: %s\n",aError->description().c_str()); return aCompletedCB(aError); } // check next ++aNextDev; queryNextDev(aBusDevices, aNextDev, aCompletedCB, ErrorPtr()); }
bool DaliComm::isYes(bool aNoOrTimeout, uint8_t aResponse, ErrorPtr &aError, bool aCollisionIsYes) { bool isYes = !aNoOrTimeout; if (aError && aCollisionIsYes && aError->isError(DaliCommError::domain(), DaliCommErrorDALIFrame)) { // framing error -> consider this a YES isYes = true; aError.reset(); // not considered an error when aCollisionIsYes is set } else if (isYes && !aCollisionIsYes) { // regular answer, must be DALIANSWER_YES to be a regular YES if (aResponse!=DALIANSWER_YES) { // invalid YES response aError.reset(new DaliCommError(DaliCommErrorInvalidAnswer)); } } if (aError) return false; // real error, consider NO // return YES/NO return isYes; }