diff options
| author | morefigs <morefigs@gmail.com> | 2018-03-28 20:46:54 +1100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-03-28 20:46:54 +1100 |
| commit | a6511997853e5ec8ae9f3abfcc66f097062a3062 (patch) | |
| tree | 77836ef10893bd519f4734d2fcf7c6c08eed99f4 | |
| parent | 046398c35b660f15235ad141134122afb9e16fcc (diff) | |
| parent | 98b15822dab1d8cbfd0bb5f1a72827ae63483899 (diff) | |
| download | pymba-a6511997853e5ec8ae9f3abfcc66f097062a3062.tar.gz pymba-a6511997853e5ec8ae9f3abfcc66f097062a3062.zip | |
Merge pull request #65 from seahawk67/master
Support for enum feature range added.
| -rw-r--r-- | pymba/tests/test_enumfeature.py | 25 | ||||
| -rw-r--r-- | pymba/vimbadll.py | 16 | ||||
| -rw-r--r-- | pymba/vimbafeature.py | 55 | ||||
| -rw-r--r-- | pymba/vimbaframe.py | 1 | ||||
| -rw-r--r-- | pymba/vimbaobject.py | 3 |
5 files changed, 77 insertions, 23 deletions
diff --git a/pymba/tests/test_enumfeature.py b/pymba/tests/test_enumfeature.py new file mode 100644 index 0000000..7f9dd4c --- /dev/null +++ b/pymba/tests/test_enumfeature.py @@ -0,0 +1,25 @@ +#!/usr/bin/python +from __future__ import absolute_import, print_function, division +from pymba import * + + +def test_enumfeature(): + # get system object + with Vimba() as vimba: + system = vimba.getSystem() + + # get enum value + print ("get enum value (DiscoveryCameraEvent): '%s'" % (system.DiscoveryCameraEvent)) + + # get enum range + range = system.getFeatureRange('DiscoveryCameraEvent') + print ("get enum value range (DiscoveryCameraEvent): '%s'" % (str(range))) + + # set enum value + #print ("setting enum value (DiscoveryCameraEvent)...") + #system.DiscoveryCameraEvent = 'Unreachable' + #print ("enum value (DiscoveryCameraEvent)set to '%s'." % (system.DiscoveryCameraEvent.value)) + + +if __name__ == '__main__': + test_enumfeature()
\ No newline at end of file diff --git a/pymba/vimbadll.py b/pymba/vimbadll.py index fb49fec..a6b9f3c 100644 --- a/pymba/vimbadll.py +++ b/pymba/vimbadll.py @@ -115,7 +115,7 @@ class VimbaDLL(object): # # -- VmbFeatureEnumGet() # -- VmbFeatureEnumSet() - # VmbFeatureEnumRangeQuery() + # -- VmbFeatureEnumRangeQuery() # VmbFeatureEnumIsAvailable() # VmbFeatureEnumAsInt() # VmbFeatureEnumAsString() @@ -160,7 +160,6 @@ class VimbaDLL(object): # -- VmbRegistersWrite() # Vimba C API DLL - _vimbaDLL = dll_loader.LoadLibrary(vimbaC_path) # version query @@ -303,6 +302,19 @@ class VimbaDLL(object): c_char_p, c_char_p) # value to set + # query the range of values of the feature + featureEnumRangeQuery = _vimbaDLL.VmbFeatureEnumRangeQuery + featureEnumRangeQuery.restype = c_int32 + featureEnumRangeQuery.argtypes = (c_void_p, # handle + # name of the feature + c_char_p, + # pointer to enum names (array) + POINTER(c_char_p), + # array length + c_uint32, + # pointer to num enum names found + POINTER(c_uint32)) + # get the string value of a feature featureStringGet = _vimbaDLL.VmbFeatureStringGet featureStringGet.restype = c_int32 diff --git a/pymba/vimbafeature.py b/pymba/vimbafeature.py index 2881d53..88275ce 100644 --- a/pymba/vimbafeature.py +++ b/pymba/vimbafeature.py @@ -61,7 +61,7 @@ class VimbaFeature(object): self._rangeQueryTypeFuncs = {0: self._unknownRange, 1: self._rangeQueryIntFeature, 2: self._rangeQueryFloatFeature, - 3: self._unknownRange, + 3: self._rangeQueryEnumFeature, 4: self._unknownRange, 5: self._unknownRange, 6: self._unknownRange, @@ -305,22 +305,37 @@ class VimbaFeature(object): return (minToGet.value, maxToGet.value) - # def _rangeQueryEnumFeature(self): - # """ - # Get the range of an enum feature. - # - # :returns: tuple -- min and max range. - # """ - # - # create args - # minToGet = c_uint32() - # maxToGet = c_uint32() - # - # errorCode = VimbaDLL.featureEnumRangeQuery(self._handle, - # self._name, - # byref(minToGet), - # byref(maxToGet)) - # if errorCode != 0: - # raise VimbaException(errorCode) - # - # return (minToGet.value, maxToGet.value) + def _rangeQueryEnumFeature(self): + """ + Get the range of an enum feature. + :returns: list -- enum names for the given feature. + """ + + # call once to get number of available enum names + # Vimba DLL will return an error code + numFound = c_uint32(-1) + errorCode = VimbaDLL.featureEnumRangeQuery(self._handle, + self._name, + None, + 0, + byref(numFound)) + if errorCode != 0: + raise VimbaException(errorCode) + + # number of names specified by Vimba + numEnumNames = numFound.value + + # args + enumNamesArray = (c_char_p * numEnumNames)() + + # call again to get the enum names + # Vimba DLL will return an error code + errorCode = VimbaDLL.featureEnumRangeQuery(self._handle, + self._name, + enumNamesArray, + numEnumNames, + byref(numFound)) + if errorCode != 0: + raise VimbaException(errorCode) + + return list(enumName.decode() for enumName in enumNamesArray) diff --git a/pymba/vimbaframe.py b/pymba/vimbaframe.py index 83fd9de..a95f6a7 100644 --- a/pymba/vimbaframe.py +++ b/pymba/vimbaframe.py @@ -22,6 +22,7 @@ PIXEL_FORMATS = { "Mono12Packed": 1.5, # ? "Mono14": 2, "Mono16": 2, + "RGB8": 3, "RGB8Packed": 3, "BGR8Packed": 3, "RGBA8Packed": 4, diff --git a/pymba/vimbaobject.py b/pymba/vimbaobject.py index c4f803c..695a011 100644 --- a/pymba/vimbaobject.py +++ b/pymba/vimbaobject.py @@ -134,7 +134,8 @@ class VimbaObject(object): :param featureName: name of the feature to query. - :returns: tuple -- range as (feature min value, feature max value). + :returns: tuple -- range as (feature min value, feature max value, for int or float features only). + list -- names of possible enum values (for enum features only). """ # can't cache this, need to look it up live return VimbaFeature(featureName.encode(), self._handle).range |
