Support Request #1605
closedRetrieve Signal Value from ISignalRegistryExtended
Description
Supportanfrage
Hi Flo,
Ich habe eine Frage zur Signal Registry, denn ich bin aus der SDK Doku nicht schlau geworden. Umgebung: Win7 x64/ ADTF 2.13.3
Und zwar möchte ich aus einem Filter auf einen bestimmten Wert in der Registry, dass auch im Signal View angezeigt wird. Was wäre das Gegenpart von einem ISignalProvider? Hier ist ein Pseudocode für cFilter::Init() aus?
RETURN_IF_FAILED(_runtime->GetObject(OID_ADTF_SIGNAL_REGISTRY, IID_ADTF_SIGNAL_REGISTRY_EXTENDED, (tVoid**) &m_pSignalRegistry)); RETURN_IF_FAILED(m_pSignalRegistry->GetSignalList(&m_pSignalDescription, &m_nSignalCount)); RETURN_IF_POINTER_NULL(m_pSignalDescription); cString signalName; tSignalHandle hSignalHandle; for (size_t i = 0; i < m_nSignalCount; ++i) { signalName = m_pSignalDescription[i].strName; if (signalName.Find("Gesuchtes_Signal") != -1) { RETURN_IF_FAILED(m_pSignalRegistry->RegisterSignalListener(signalName, dynamic_cast<adtf::IRunnable*>(this), &hSignalHandle)); break; } }
Wie und wo soll ich mir den Wert zurückholen? In cFilter::Run, GetSignalValue aufrufen oder eher RequestSignal(const tChar* strSignalName, ISignal** ppSignal)?
Lösung
siehe How can I retrieve the signal value from ISignalRegistryExtended ?
Updated by hidden over 6 years ago
- Project changed from Public Support to 5
- Status changed from New to In Progress
- Topic set to ADTF::Common
- Customer set to BOSCH
- Affected Products ADTF 2.13.3 added
- Platform Windows 7 64bit added
Updated by hidden over 6 years ago
Hallo,
ein kleines Update nach dem ich das hier in der SDK Dokumentation gefunden habe (BITTE BITTE hervorheben oder ein Beispiel anbieten):
The listeners adtf::IRunnable::Run method will be called with RUN_SIGNAL_REGISTRY_EVENT as activation type and an array of tSignalRegistryEvent structs as user data. You can find out the size of the array by dividing nUserDataSize by sizeof(tSignalRegistryEvent).
Meine MyFilter::Run() Implementierung sieht somit folgendermaßen aus und ich kriege den "richtigen" Wert raus:
tResult MyFilter::Run(tInt nActivationCode, const tVoid *pvUserData, tInt szUserDataSize, __exception)
{
if (nActivationCode == RUN_SIGNAL_REGISTRY_EVENT && pvUserData != nullptr) {
tSignalRegistryEvent const* pEvent = static_cast<tSignalRegistryEvent const*>(pvUserData);
tInt nEventCount = szUserDataSize / sizeof(tSignalRegistryEvent);
__synchronized_obj(m_oSignalInUse);
LOG_INFO(cString::Format("Something clever should be displayed %f", pEvent->pValue->f64Value));
}
return cBaseQtFilter::Run(nActivationCode, pvUserData, szUserDataSize, __exception_ptr);
}
Allerdings hätte ich noch eine Frage. Falls, andere Filter das Event RUN_SIGNAL_REGISTRY_EVENT senden,
wie stelle ich sicher, dass ich den Wert des registrierten Signals bekomme?
Besten Dank und viele Grüße,
Yann
Updated by hidden over 6 years ago
- Status changed from In Progress to Customer Feedback Required
Hi Yann,
sorry, ich hatte gestern KuFo aber wie ich sehe hast du dir schon selbst geholfen.
Allerdings hätte ich noch eine Frage. Falls, andere Filter das Event RUN_SIGNAL_REGISTRY_EVENT senden,
wie stelle ich sicher, dass ich den Wert des registrierten Signals bekomme?
Du hast deinen Listener ja an die Signal Registry gehängt, dadurch ist das gewährleistet, ansonsten erreicht dich das Event ja gar nicht.
Wie du sicher weißt, wird ADTF 2.x nicht weiterentwickelt, deshalb werden wir da nichts mehr machen.BITTE BITTE hervorheben oder ein Beispiel anbieten
Ich habe das Thema mal in die FAQ's aufgenommen... passt das so ?
Updated by hidden over 6 years ago
Florian Roth wrote:
Wie du sicher weißt, wird ADTF 2.x nicht weiterentwickelt, deshalb werden wir da nichts mehr machen.
Ich habe das Thema mal in die FAQ's aufgenommen... passt das so ?
Perfekt! :)
Updated by hidden over 6 years ago
- Project changed from 5 to Public Support
- Description updated (diff)
- Status changed from Customer Feedback Required to To Be Closed
- Private changed from Yes to No
- Resolution set to Solved Issue
- Department set to CC-DA/EPC
Ticket kann damit geschlossen werden