XN_DDK_API XnStatus XnPropertySetCloneModule(const XnPropertySet* pSource, XnPropertySet* pDest, const XnChar* strModule, const XnChar* strNewName) { XnStatus nRetVal = XN_STATUS_OK; XnActualPropertiesHash* pModuleProps = NULL; nRetVal = pSource->pData->Get(strModule, pModuleProps); XN_IS_STATUS_OK(nRetVal); nRetVal = XnPropertySetAddModule(pDest, strNewName); XN_IS_STATUS_OK(nRetVal); for (XnActualPropertiesHash::ConstIterator it = pModuleProps->Begin(); it != pModuleProps->End(); ++it) { XnProperty* pProp = it->Value(); switch (pProp->GetType()) { case XN_PROPERTY_TYPE_INTEGER: { XnActualIntProperty* pIntProp = (XnActualIntProperty*)pProp; nRetVal = XnPropertySetAddIntProperty(pDest, strNewName, pIntProp->GetName(), pIntProp->GetValue()); XN_IS_STATUS_OK(nRetVal); break; } case XN_PROPERTY_TYPE_REAL: { XnActualRealProperty* pRealProp = (XnActualRealProperty*)pProp; nRetVal = XnPropertySetAddRealProperty(pDest, strNewName, pRealProp->GetName(), pRealProp->GetValue()); XN_IS_STATUS_OK(nRetVal); break; } case XN_PROPERTY_TYPE_STRING: { XnActualStringProperty* pStrProp = (XnActualStringProperty*)pProp; nRetVal = XnPropertySetAddStringProperty(pDest, strNewName, pStrProp->GetName(), pStrProp->GetValue()); XN_IS_STATUS_OK(nRetVal); break; } case XN_PROPERTY_TYPE_GENERAL: { XnActualGeneralProperty* pGenProp = (XnActualGeneralProperty*)pProp; nRetVal = XnPropertySetAddGeneralProperty(pDest, strNewName, pGenProp->GetName(), &pGenProp->GetValue()); XN_IS_STATUS_OK(nRetVal); break; } default: XN_LOG_WARNING_RETURN(XN_STATUS_ERROR, XN_MASK_DDK, "Unknown property type: %d", pProp->GetType()); } } return (XN_STATUS_OK); }
XnStatus XnDataPacker::WritePropertySetProperties(const XnPropertySet* pSet) { XnStatus nRetVal = XN_STATUS_OK; for (XnPropertySetData::Iterator it = pSet->pData->Begin(); it != pSet->pData->End(); ++it) { XnActualPropertiesHash* pModule = it->Value(); for (XnActualPropertiesHash::ConstIterator itProp = pModule->Begin(); itProp != pModule->End(); ++itProp) { switch (itProp->Value()->GetType()) { case XN_PROPERTY_TYPE_INTEGER: { XnActualIntProperty* pProp = (XnActualIntProperty*)itProp->Value(); nRetVal = WritePropertyImpl(pProp->GetModule(), pProp->GetName(), pProp->GetValue()); XN_IS_STATUS_OK(nRetVal); break; } case XN_PROPERTY_TYPE_REAL: { XnActualRealProperty* pProp = (XnActualRealProperty*)itProp->Value(); nRetVal = WritePropertyImpl(pProp->GetModule(), pProp->GetName(), pProp->GetValue()); XN_IS_STATUS_OK(nRetVal); break; } case XN_PROPERTY_TYPE_STRING: { XnActualStringProperty* pProp = (XnActualStringProperty*)itProp->Value(); nRetVal = WritePropertyImpl(pProp->GetModule(), pProp->GetName(), pProp->GetValue()); XN_IS_STATUS_OK(nRetVal); break; } case XN_PROPERTY_TYPE_GENERAL: { XnActualGeneralProperty* pProp = (XnActualGeneralProperty*)itProp->Value(); nRetVal = WritePropertyImpl(pProp->GetModule(), pProp->GetName(), pProp->GetValue()); XN_IS_STATUS_OK(nRetVal); break; } default: XN_LOG_WARNING_RETURN(XN_STATUS_ERROR, XN_MASK_DDK, "Unknown property type: %d", itProp->Value()->GetType()); } } } StartWritingIntenalObject(XN_PACKED_PROPERTY_SET_PROPERTIES_END_MARKER); EndWritingInternalObject(); return (XN_STATUS_OK); }
XnStatus XnActualPropertiesHash::CopyFrom(const XnActualPropertiesHash& other) { XnStatus nRetVal = XN_STATUS_OK; Clear(); strncpy(m_strName, other.m_strName, XN_DEVICE_MAX_STRING_LENGTH); for (ConstIterator it = other.Begin(); it != other.End(); ++it) { switch (it->Value()->GetType()) { case XN_PROPERTY_TYPE_INTEGER: { XnActualIntProperty* pProp = (XnActualIntProperty*)it->Value(); nRetVal = Add(pProp->GetId(), pProp->GetName(), pProp->GetValue()); XN_IS_STATUS_OK(nRetVal); break; } case XN_PROPERTY_TYPE_REAL: { XnActualRealProperty* pProp = (XnActualRealProperty*)it->Value(); nRetVal = Add(pProp->GetId(), pProp->GetName(), pProp->GetValue()); XN_IS_STATUS_OK(nRetVal); break; } case XN_PROPERTY_TYPE_STRING: { XnActualStringProperty* pProp = (XnActualStringProperty*)it->Value(); nRetVal = Add(pProp->GetId(), pProp->GetName(), pProp->GetValue()); XN_IS_STATUS_OK(nRetVal); break; } case XN_PROPERTY_TYPE_GENERAL: { XnActualGeneralProperty* pProp = (XnActualGeneralProperty*)it->Value(); nRetVal = Add(pProp->GetId(), pProp->GetName(), pProp->GetValue()); XN_IS_STATUS_OK(nRetVal); break; } default: XN_LOG_WARNING_RETURN(XN_STATUS_ERROR, XN_MASK_DDK, "Unknown property type: %d\n", it->Value()->GetType()); } } return (XN_STATUS_OK); }
XnStatus XnDeviceModule::UnsafeBatchConfig(const XnActualPropertiesHash& props) { XnStatus nRetVal = XN_STATUS_OK; for (XnActualPropertiesHash::ConstIterator it = props.Begin(); it != props.End(); ++it) { XnProperty* pRequestProp = it->Value(); switch (pRequestProp->GetType()) { case XN_PROPERTY_TYPE_INTEGER: { XnActualIntProperty* pProp = (XnActualIntProperty*)pRequestProp; nRetVal = UnsafeUpdateProperty(pProp->GetName(), pProp->GetValue()); XN_IS_STATUS_OK(nRetVal); break; } case XN_PROPERTY_TYPE_REAL: { XnActualRealProperty* pProp = (XnActualRealProperty*)pRequestProp; nRetVal = UnsafeUpdateProperty(pProp->GetName(), pProp->GetValue()); XN_IS_STATUS_OK(nRetVal); break; } case XN_PROPERTY_TYPE_STRING: { XnActualStringProperty* pProp = (XnActualStringProperty*)pRequestProp; nRetVal = UnsafeUpdateProperty(pProp->GetName(), pProp->GetValue()); XN_IS_STATUS_OK(nRetVal); break; } case XN_PROPERTY_TYPE_GENERAL: { XnActualGeneralProperty* pProp = (XnActualGeneralProperty*)pRequestProp; nRetVal = UnsafeUpdateProperty(pProp->GetName(), pProp->GetValue()); XN_IS_STATUS_OK(nRetVal); break; } default: XN_LOG_WARNING_RETURN(XN_STATUS_ERROR, XN_MASK_DDK, "Unknown property type: %d\n", pRequestProp->GetType()); } // type switch } // props loop return (XN_STATUS_OK); }
XnStatus XnSensorFirmwareParams::AddFirmwareParam(XnActualIntProperty& Property, XnUInt16 nFirmwareParam, XnFWVer nMinVer /* = XN_SENSOR_FW_VER_UNKNOWN */, XnFWVer nMaxVer /* = XN_SENSOR_FW_VER_UNKNOWN */, XnUInt16 nValueIfNotSupported /* = 0 */) { XnStatus nRetVal = XN_STATUS_OK; XnFirmwareParam param; param.pProperty = &Property; param.nFirmwareParam = nFirmwareParam; param.MinVer = nMinVer; param.MaxVer = nMaxVer; param.nValueIfNotSupported = nValueIfNotSupported; nRetVal = m_AllFirmwareParams.Set(&Property, param); XN_IS_STATUS_OK(nRetVal); XnChar csNewName[XN_DEVICE_MAX_STRING_LENGTH]; sprintf(csNewName, "%s (%d)", Property.GetName(), nFirmwareParam); Property.UpdateName("Firmware", csNewName); Property.SetLogSeverity(XN_LOG_VERBOSE); Property.SetAlwaysSet(TRUE); Property.UpdateSetCallback(SetFirmwareParamCallback, this); return (XN_STATUS_OK); }
XnStatus XnDeviceModuleHolder::CreateProperty(XnProperty* pRequestProp) { XnStatus nRetVal = XN_STATUS_OK; XnProperty* pNewProp = NULL; switch (pRequestProp->GetType()) { case XN_PROPERTY_TYPE_INTEGER: { XnActualIntProperty* pProp = (XnActualIntProperty*)pRequestProp; XN_VALIDATE_NEW(pNewProp, XnActualIntProperty, pProp->GetName(), pProp->GetValue()); break; } case XN_PROPERTY_TYPE_REAL: { XnActualRealProperty* pProp = (XnActualRealProperty*)pRequestProp; XN_VALIDATE_NEW(pNewProp, XnActualRealProperty, pProp->GetName(), pProp->GetValue()); break; } case XN_PROPERTY_TYPE_STRING: { XnActualStringProperty* pProp = (XnActualStringProperty*)pRequestProp; XN_VALIDATE_NEW(pNewProp, XnActualStringProperty, pProp->GetName(), pProp->GetValue()); break; } case XN_PROPERTY_TYPE_GENERAL: { XnActualGeneralProperty* pProp = (XnActualGeneralProperty*)pRequestProp; // create new buffer XnGeneralBuffer gbNew; nRetVal = XnGeneralBufferAlloc(&gbNew, pProp->GetValue().nDataSize); XN_IS_STATUS_OK(nRetVal); // copy content xnOSMemCopy(gbNew.pData, pProp->GetValue().pData, pProp->GetValue().nDataSize); XnActualGeneralProperty* pNewGeneralProp = NULL; XN_VALIDATE_NEW(pNewGeneralProp, XnActualGeneralProperty, pProp->GetName(), gbNew); pNewGeneralProp->SetAsBufferOwner(TRUE); pNewProp = pNewGeneralProp; break; } default: XN_LOG_WARNING_RETURN(XN_STATUS_ERROR, XN_MASK_DDK, "Unknown property type: %d\n", pRequestProp->GetType()); } // switch // add the property to the module nRetVal = m_pModule->AddProperty(pNewProp); if (nRetVal != XN_STATUS_OK) { XN_DELETE(pNewProp); return (nRetVal); } // and add it to the list of allocated ones (so we'll delete it afterwards) m_Allocated.AddLast(pNewProp); return XN_STATUS_OK; }
XnStatus XnSensorFirmwareParams::CommitTransactionAsBatch() { XnStatus nRetVal = XN_STATUS_OK; if (!m_bInTransaction) { return XN_STATUS_ERROR; } // we are no longer in transaction, even if we fail to commit. m_bInTransaction = FALSE; if (m_TransactionOrder.Size() != 0) { XnUInt32 nMaxCount = m_TransactionOrder.Size(); XnInnerParamData* pParams; XN_VALIDATE_CALLOC(pParams, XnInnerParamData, nMaxCount); XnChar strLogMessage[1024]; XnUInt32 nMaxLength = 1024; XnUInt32 nLength = 0; XnUInt32 nChars; xnOSStrFormat(strLogMessage + nLength, nMaxLength - nLength, &nChars, "Setting firmware params:\n\t"); nLength += nChars; XnUInt32 nCount = 0; for (XnActualIntPropertyList::Iterator it = m_TransactionOrder.begin(); it != m_TransactionOrder.end(); ++it) { XnActualIntProperty* pProp = *it; XnUInt32 nValue; nRetVal = m_Transaction.Get(pProp, nValue); if (nRetVal != XN_STATUS_OK) { xnOSFree(pParams); return (nRetVal); } XnFirmwareParam* pParam; nRetVal = CheckFirmwareParam(pProp, nValue, &pParam); if (nRetVal != XN_STATUS_OK) { xnOSFree(pParams); return (nRetVal); } if (pParam != NULL) { xnOSStrFormat(strLogMessage + nLength, nMaxLength - nLength, &nChars, "%s = %u\n\t", pProp->GetName(), nValue); nLength += nChars; pParams[nCount].nParam = pParam->nFirmwareParam; pParams[nCount].nValue = (XnUInt16)nValue; nCount++; } } xnLogVerbose(XN_MASK_SENSOR_PROTOCOL, "%s", strLogMessage); // set all params nRetVal = m_pCommands->SetMultipleFirmwareParams(pParams, nCount); xnOSFree(pParams); XN_IS_STATUS_OK(nRetVal); // and update their props for (XnActualIntPropertyList::Iterator it = m_TransactionOrder.begin(); it != m_TransactionOrder.end(); ++it) { XnActualIntProperty* pProp = *it; XnUInt32 nValue; nRetVal = m_Transaction.Get(pProp, nValue); XN_IS_STATUS_OK(nRetVal); nRetVal = pProp->UnsafeUpdateValue(nValue); XN_IS_STATUS_OK(nRetVal); } } m_Transaction.Clear(); m_TransactionOrder.Clear(); return (XN_STATUS_OK); }