Impact Acquire SDK Python
FirmwareUpdater Class Reference

A class to perform a firmware update of a specific device. More...

Inheritance diagram for FirmwareUpdater:
[legend]

Public Member Functions

 __disown__ (self)
 
 __init__ (self, pDev, boForceOverideSameVersion=False, boForceDowngrade=False, boKeepUserSets=True, boForceBreakingChange=False)
 Creates a new mvIMPACT.acquire.FirmwareUpdater object.
 
 getTimeElapsed (self)
 A method to receive the time in seconds since the update process has been started.
 
 onErasingFlash (self, currentProgress_pc, timeElapsed_s)
 This function will be called once the devices flash memory is erased.
 
 onErrorMessage (self, timeElapsed_s)
 This function will be called once a message is waiting to be passed to the user.
 
 onHardResetRequired (self, currentProgress_pc, timeElapsed_s)
 This function will be called once the device reboots and a manual hard reset is required.
 
 onLoadingUserSets (self, currentProgress_pc, timeElapsed_s)
 This function will be called when the settings of the device are written back after updating the firmware.
 
 onRebooting (self, currentProgress_pc, timeElapsed_s)
 This function will be called once the device reboots to make sure the new firmware is applied to the device.
 
 onSavingUserSets (self, currentProgress_pc, timeElapsed_s)
 This function will be called when the settings of the device are stored before updating the firmware.
 
 onUnzippingFirmwareArchive (self, currentProgress_pc, timeElapsed_s)
 This function will be called once firmware archive (*.mvu) is unzipped to provide the correct firmware file.
 
 onUpdatingBootProgrammer (self, currentProgress_pc, timeElapsed_s)
 This function will be called once the boot programmer of an mvBlueFOX3 camera is updated.
 
 onUploadingImage (self, currentProgress_pc, timeElapsed_s)
 This function will be called once the actual firmware file is uploaded to the device's flash memory.
 
 setTimeElapsed (self, time_s)
 
 statusMessage (self)
 Returns the current status from the status property.
 
 update (self, *args)
 A function to start the firmware update process.
 

Static Public Member Functions

 verifyFirmwareChecksum (pDev, archivePath, pStatusMessage=None)
 A function to check the integrity of the firmware running on a device.
 

Properties

 firmwareVersionToUpload = property(lib_mvIMPACT_acquire.FirmwareUpdater_firmwareVersionToUpload_get, doc=)
 An enumerated integer property containing a list of available firmware versions.
 
 thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
 

Detailed Description

A class to perform a firmware update of a specific device.

This class is intended to provide an ease of use possibility to update the firmware of specific devices. It is possible to specify the behavior of the class very detailed to make sure the update suits the users expectations. It is also possible to derive from this class and override various functions in order to get custom notifications e.g. to update a GUI application.

To start a firmware update for Balluff mvBlueFOX devices the following code will be sufficient:

fwUpdater = acquire.FirmwareUpdater( pDev, False, False, True, False )
fwUpdateResult = fwUpdater.update( PATH_TO_FIRMWARE_ARCHIVE.mvu )
if FWUpdateResult == 0:
print("Update successful!")
else:
print( fwUpdater.statusMessage() )

To start a firmware update for Balluff mvBlueFOX devices the following code will be sufficient:

fwUpdater = acquire.FirmwareUpdater( pDev )
fwUpdateResult = fwUpdater.update( 52 )
if FWUpdateResult == 0:
print("Update successful!")
else:
print( fwUpdater.statusMessage() )

A more custom behavior can be accomplished by deriving from the acquire.FirmwareUpdater class and re-implementing the various notification functions:

from mvIMPACT import acquire
class MyFirmwareUpdater( acquire.FirmwareUpdater ):
def __init__(self, *args):
super(MyFirmwareUpdater, self).__init__(*args)
def onErrorMessage( self, timeElapsed_s ):
print( "Error: " + statusMessage() + " @ " + str(timeElapsed_s) + " s" )
return acquire.fuaContinue
def onErasingFlash( self, currentProgress_pc, timeElapsed_s ):
print( "Erasing - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " s" )
return acquire.fuaContinue
def onUnzippingFirmwareArchive( self, currentProgress_pc, timeElapsed_s ):
print( "Unzipping firmware archive - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " s" )
return acquire.fuaContinue
def onUpdatingBootProgrammer( self, currentProgress_pc, timeElapsed_s ):
print( "Updating boot programmer - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " s" )
return acquire.fuaContinue
def onUploadingImage( self, currentProgress_pc, timeElapsed_s ):
print( "Uploading - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " s" )
return acquire.fuaContinue
def onRebooting( self, currentProgress_pc, timeElapsed_s ):
print( "Rebooting - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " s" )
return acquire.fuaContinue
def onHardResetRequired( self, currentProgress_pc, timeElapsed_s ):
print( "Rebooting - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " s" )
print( "Manual hard reset required." )
print( "Status message: " + statusMessage() )
return acquire.fuaCancel
def onSavingUserSets( self, currentProgress_pc, timeElapsed_s ):
print( "Saving sets - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " s" )
return acquire.fuaContinue
def onLoadingUserSets( self, currentProgress_pc, timeElapsed_s ):
print( "Loading sets - Update progress: " + str(currentProgress_pc) + ", time " + str(timeElapsed_s) + " s" )
return acquire.fuaContinue
Note
The following device families are currently supported by this API:
  • GenICam compliant Balluff/MATRIX VISION devices
  • BVS CA-GX0 (mvBlueCOUGAR-X)
  • BVS CA-GX2 (mvBlueCOUGAR-XD)
  • BVS CA-GT (mvBlueCOUGAR-XT)
  • BVS CA-SF (mvBlueFOX3)
  • BVS CA-BN (mvBlueNAOS)
  • Other Balluff/MATRIX VISION devices
  • BVS CA-MLC / BVS CA-IGC (mvBlueFOX-MLC/IGC)
  • mvBlueFOX
Attention
  • Do not unplug the device during the update procedure!
  • Once the firmwareUpdate method call returns an error call the mvIMPACT.acquire.FirmwareUpdater.statusMessage function. It will return useful information about the current status (including issues) of the update procedure.
  • The actual mvIMPACT.acquire.FirmwareUpdater.update method did get an additional parameter in version 2.48.0 of this SDK! Make sure you understand the intention of this parameter! When using older versions of this API make sure not attempting to use a device without closing, updating the device list and re-opening it again. Undefined behavior might be the result when not doing so!
Since
2.41.0

Constructor & Destructor Documentation

◆ __init__()

__init__ ( self,
pDev,
boForceOverideSameVersion = False,
boForceDowngrade = False,
boKeepUserSets = True,
boForceBreakingChange = False )

Creates a new mvIMPACT.acquire.FirmwareUpdater object.

Parameters
pDev[in] A pointer to a mvIMPACT.acquire.Device object obtained from a mvIMPACT.acquire.DeviceManager object.
boForceOverideSameVersion[in] A boolean value which defines if updates using the same version as installed on the camera should be allowed.
boForceDowngrade[in] A boolean value which defines if updates using an older version as installed on the camera should be allowed.
boKeepUserSets[in] A boolean value which defines if the user sets of the device will be kept or will be deleted during the update.
boForceBreakingChange[in] A boolean value which defines if updates to versions which will deliver interface breaking changes will be allowed. Setting this value to true will also update a device which after the update might have a different interface. See documentation for additional information about breaking changes in firmware versions(there are not too many)!

Member Function Documentation

◆ __disown__()

__disown__ ( self)

◆ getTimeElapsed()

getTimeElapsed ( self)

A method to receive the time in seconds since the update process has been started.

Returns
The time elapsed since the firmware update currently running has been started.

◆ onErasingFlash()

onErasingFlash ( self,
currentProgress_pc,
timeElapsed_s )

This function will be called once the devices flash memory is erased.

Re-implement this function in a derived class in order to implement a custom behaviour.

Note
Only some device types require this step so this callback might not be called for every device type.
Returns
Parameters
currentProgress_pc[in] The current progress of the erase operation (in percent).
timeElapsed_s[in] The total time elapsed since starting the update process (in seconds).

◆ onErrorMessage()

onErrorMessage ( self,
timeElapsed_s )

This function will be called once a message is waiting to be passed to the user.

Re-implement this function in a derived class in order to implement a custom behaviour.

Returns
Parameters
timeElapsed_s[in] The total time elapsed since starting the update process (in seconds).

◆ onHardResetRequired()

onHardResetRequired ( self,
currentProgress_pc,
timeElapsed_s )

This function will be called once the device reboots and a manual hard reset is required.

Re-implement this function in a derived class in order to implement a custom behaviour.

Note
If this function is called, a power cycle is inevitable. Otherwise the new firmware may be broken. The default is to stop the update at this point, so that the user can manually disconnect the power source.
Returns
Parameters
currentProgress_pc[in] The current progress of the reboot operation (in percent).
timeElapsed_s[in] The total time elapsed since starting the update process (in seconds).

◆ onLoadingUserSets()

onLoadingUserSets ( self,
currentProgress_pc,
timeElapsed_s )

This function will be called when the settings of the device are written back after updating the firmware.

Re-implement this function in a derived class in order to implement a custom behaviour.

This callback will only be called when user sets shall be available after the update. This can be specified by setting the boKeepUserSets flag upon construction of this object.

Returns
Parameters
currentProgress_pc[in] The current progress of the load operation (in percent).
timeElapsed_s[in] The total time elapsed since starting the update process (in seconds).

◆ onRebooting()

onRebooting ( self,
currentProgress_pc,
timeElapsed_s )

This function will be called once the device reboots to make sure the new firmware is applied to the device.

Re-implement this function in a derived class in order to implement a custom behaviour.

Note
Returning mvIMPACT.acquire.fuaCancel on this callback will stop the upgrade process without rebooting the device. However, a new firmware is not active until a reboot or hard reset has been performed.
Returns
Parameters
currentProgress_pc[in] The current progress of the reboot operation (in percent).
timeElapsed_s[in] The total time elapsed since starting the update process (in seconds).

◆ onSavingUserSets()

onSavingUserSets ( self,
currentProgress_pc,
timeElapsed_s )

This function will be called when the settings of the device are stored before updating the firmware.

Re-implement this function in a derived class in order to implement a custom behaviour.

This callback will only be called when user sets shall be available after the update. This can be specified by setting the boKeepUserSets flag upon construction of this object.

Returns
Parameters
currentProgress_pc[in] The current progress of the store operation (in percent).
timeElapsed_s[in] The total time elapsed since starting the update process (in seconds).

◆ onUnzippingFirmwareArchive()

onUnzippingFirmwareArchive ( self,
currentProgress_pc,
timeElapsed_s )

This function will be called once firmware archive (*.mvu) is unzipped to provide the correct firmware file.

Re-implement this function in a derived class in order to implement a custom behaviour.

Returns
Parameters
currentProgress_pc[in] The current progress of the unzip operation (in percent).
timeElapsed_s[in] The total time elapsed since starting the update process (in seconds).

◆ onUpdatingBootProgrammer()

onUpdatingBootProgrammer ( self,
currentProgress_pc,
timeElapsed_s )

This function will be called once the boot programmer of an mvBlueFOX3 camera is updated.

Re-implement this function in a derived class in order to implement a custom behaviour.

Note
  • Only mvBlueFOX3 cameras require this step so this callback might not be called in case of different device types.
  • BootProgrammer updates won't be necessary often, so this callback will not apply in every firmware update process.
Returns
Parameters
currentProgress_pc[in] The current progress of the update operation (in percent).
timeElapsed_s[in] The total time elapsed since starting the update process (in seconds).

◆ onUploadingImage()

onUploadingImage ( self,
currentProgress_pc,
timeElapsed_s )

This function will be called once the actual firmware file is uploaded to the device's flash memory.

Re-implement this function in a derived class in order to implement a custom behaviour.

Note
  • Depending on the device type this step might take a few seconds up to a few minutes.
  • The callback will be called several times during the upload.
  • Each time there was a progress of 5 percent this callback will be called.
Returns
Parameters
currentProgress_pc[in] The current progress of the upload operation (in percent).
timeElapsed_s[in] The total time elapsed since starting the update process (in seconds).

◆ setTimeElapsed()

setTimeElapsed ( self,
time_s )

◆ statusMessage()

statusMessage ( self)

Returns the current status from the status property.

◆ update()

update ( self,
* args )

A function to start the firmware update process.

This function is intended to be used to update Balluff imaging and image capture devices.

Note
  • Once this function returns, the device will be closed! All objects previously created using the mvIMPACT.acquire.Device pointer must be recreated then.
  • For mvBlueFOX device this function needs to be called without passing any parameters to the function!
Returns
Parameters
archivePath[in] Path to the file which should be used to update the device. Can be empty if no update archives are needed for the device.
boUpdateDataAsNeeded[in] Can be set to false in order to save time when updating multiple devices in one go. Please note that as soon as at least one GenICam device is part of these multiple devices either mvIMPACT.acquire.DeviceManager.updateDeviceList must be called or every instance to mvIMPACT.acquire.DeviceManager in the current process needs to be destroyed afterwards before any of those GenICam devices can be used again!

◆ verifyFirmwareChecksum()

verifyFirmwareChecksum ( pDev,
archivePath,
pStatusMessage = None )
static

A function to check the integrity of the firmware running on a device.

This function is intended to be used to check the firmware integrity of Balluff imaging and image capture devices only. Most Balluff imaging and image capture devices are capable of calculating a hash from the firmware image which is currently running on the device. In addition to that firmware archives for imaging devices provided by Balluff contain hashes for all the firmware images contained in the update archive. Comparing these 2 hashes will provide additional security when an application wants to make sure that the firmware running on the device is undamaged.

Note
  • When calling this function, the firmware archive path passed to it must contain the exact same firmware that is running on the device.
  • This feature is currently only available for most Balluff GenICam compliant devices.
  • Once this function returns, the device will be closed! All objects previously created using the mvIMPACT.acquire.Device pointer must be recreated then.
  • If the function returns a negative code of type mvIMPACT.acquire.TDMR_ERROR, the status string will contain a more specific explanation about the root cause for the issue.
Since
2.47.0
Returns
Parameters
pDev[in] A pointer to a mvIMPACT.acquire.Device object obtained from a mvIMPACT.acquire.DeviceManager object.
archivePath[in] Path to the file which should be used to compare the firmware checksum from with the firmware currently running on the device.
pStatusMessage[out] Pointer to a string receiving additional information about the outcome of the operation. This can be 0 if no one is interested in status information.

Property Documentation

◆ firmwareVersionToUpload

firmwareVersionToUpload = property(lib_mvIMPACT_acquire.FirmwareUpdater_firmwareVersionToUpload_get, doc=)
static

An enumerated integer property containing a list of available firmware versions.

Note
This feature currently is only available for mvBlueFOX devices since here the firmware is part of the driver library. So no additional archive is needed, but the desired firmware version to upload into the device's non-volatile memory can be selected by writing to this property before calling the mvIMPACT.acquire.FirmwareUpdater.update function.

◆ thisown

thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
static