MBS Nikon PlugIn

Ich versuche mittels des MBS Nikon PlugIns Einstellungen der Kamera abzufragen.

Ich nehme an, dass ich die Werte mit “NikonMBS.GetCapEnumString” abfrage muss und als Ergebnis z.B. “MF” für Manuellen Focus erhalte wenn die Kamera so eingestellt ist.

Im Gegensatz zu allen anderen Befehlen wird bei diesem Befehl ein dritter Parameter abgefragt (byref current as UInt32).
Weiß jemand, was mit “byref current as UInt32” gemeint sein kann?

MsgBox "Focus Mode: " + str(m.GetCapEnumString(m.kModule, 33219, ????? ))

MBS Beschreibung:
NikonMBS.GetCapEnumString(what as integer, ID as integer, byref current as UInt32) as string()
method, Nikon Cameras, MBS NikonCamera Plugin (NikonCamera), class NikonMBS,
Plugin version: 13.1, Mac: Yes, Win: Yes, Linux: No, Console & Web: Yes, Feedback.

Function: Queries a capability with a string enum value.
Notes: What: Selects what to query. Can be kModule, kSource, kItem or kData.

Die Funktion m.GetCapEnumString gibt ein Array of String zurück und der 3. Parameter ist der Index vom aktuellen.

dim Current as UInt32
dim values() as string = m.GetCapEnumString(m.kModule, 33219, Current )

danach stehen in values die Werte und current ist der Index von dem Ausgewählten.

PS: Ich hab nicht nachgeschaut, ob String auch richtig ist für 33219.

Vielen Dank.

Ich habe die Abfrage bei den Werten ausprobiert, bei den als Type “Enum” angegeben wird, also alle mit “GetArray” wie z.B. Shutter Speed. Das Array ist aber immer leer.

dim Current as UInt32 dim values() as string = m.GetCapEnumString(m.kModule, 33042, Current ) MsgBox "values: " + str(values.UBound)

Beim Focus Mode wird als Type “Unsigned” und ein einfaches “Get” angegeben. Mit welchem Befehl muss ich denn den Wert abfragen?

GetCapEnumUInt32(what as integer, ID as integer, byref current as UInt32) as UInt32()

wre ja noch da.

Leider ist da das Array auch leer.

Ich habe inzwischen fast alle Befehle und IDs durchprobiert. Ich denke dass das Problem vermutlich wo anders liegt. Bisher bekomme ich Ergebnisse angezeigt wenn der Type String, Boolean oder Float ist, bzw. die lassen sich die Prozesse starten.

Wenn es leer ist, was sagt denn der LastError dazu?
Da ist doch was verkehrt bei dir.

LastError = 0 sowohl bei “GetCapEnumString” wie auch bei “GetCapEnumUInt32”

Keine Daten und keine Fehler ist schon komisch.

Probieren wir mal was anderes:

geht das hier:

[code]const kNkMAIDCapability_CompressionLevel = 33040

dim CompReturn as UInt32
dim CompLevel() as String = m.GetCapEnumPacketString(m.kSource,kNkMAIDCapability_CompressionLevel,CompReturn)

dim CompChange as Boolean = m.SetCapEnumPackedString(m.kSource,kNkMAIDCapability_CompressionLevel,3)

dim CompReturn2 as UInt32
dim CompLevel2() as String = m.GetCapEnumPacketString(m.kSource,kNkMAIDCapability_CompressionLevel,CompReturn2)

Break[/code]

Das stellt die Kompression um.

Ich wei ja nicht, ob 33042 ein enum ist.

Für die Enum-Werte wie zB ShutterSpeed funktioniert das sehr gut. Vielen Dank.
Nur die Werte vom Typ her mit “Unsigned” gekennzeichnet sind, erreiche ich nicht.

mit keiner der Funktionen?

Eventuell sollten wir mal einen Termin ausmachen, wo wir das zusammen schauen. (Teamviewer/Skype)
Dann bring ich ein Debug Plugin mit.

Ich taste mich nach und nach an die meisten Werte ran.
Als Zahlenwert UInt32 bekomme ich jetzt oft einen Wert, wenn auch nicht immer. Das kann natürlich auch daran liegen, dass die Kamera das nicht unterstützt. Den Wert als String bekomme ich nicht (NikonMBS .GetCapString = Fehler -126).

So funktioniert das jetzt:

[code]const kNkMAIDCapability_FocusMode = 33056
dim CompReturn as UInt32 = m.GetCapUInt32(m.kSource,kNkMAIDCapability_FocusMode)

MsgBox "Last Error: " + str(m.Lasterror)
MsgBox "FocusMode: " + str(CompReturn)

if CompReturn > 0 then
while m.AutoFocus = false
// try again
wend
else
MsgBox “Manueller Focus an”
end if[/code]

Ich hab mal ein Plugin zum Debuggen geschickt.