OcaFirmwareManager#
This document describes the device side implementation of OcaFirmwareManager. This class is documented in the AES70 standard as:
Optional manager that manages versions of the different firmware and software images of the device. May be instantiated at most once in any device., If instantiated, must have object number 3.
A device that does not support firmware updating may support the subset of this class's functions needed to report firmware version numbers to inquiring controllers.
This firmware manager offers a generic interface for updating OCA devices. The actual robustness of the update process is left up to the implementer. The interface allows for any of:
- Fully transactional based uploads (i.e. only committing to the newly uploaded images after all component uploads have succeeded, and reverting back to the old images if any step fails)
- Partly transactional based uploads (i.e. committing to a newly uploaded image after each individual component upload succeeds, possibly leading to a device containing a mix of old and new images)
- Non-transactional based uploads guarded by golden images (i.e. accepting a 'weak' spot in the upload process where interruption may lead to a corrupt regular image, which is solved by loading a read-only failsafe ("golden") image in such cases that will allow recovery of the regular image)
- Non-transactional based uploads that may lead to bricked devices
Overview#
- ClassID: 1.3.3
- Header:
aes70/device/OcaFirmwareManager.hpp
- Namespace:
aes70::device
- Inheritance: aes70::device::OcaManager, aes70::device::OcaRoot, aes70::device::object
Class Declaration#
The device side implementation has the following signature.
namespace aes70::device
{
template <class Implementation>
class OcaFirmwareManager : public OcaManager<Implementation>
{
};
}
The template argument Implementation
may implement the following methods.
Note
The signatures given here are just one possibility and that most methods are optional. Implement only those methods which make sense in the context of your device. See the documentation in Implementing AES70 Classes for more details.
class MyOcaFirmwareManagerImplementation
{
// Methods defined by OcaFirmwareManager
OcaList<OcaVersion> GetComponentVersions();
void StartUpdateProcess();
void BeginActiveImageUpdate(OcaComponent component);
void AddImageData(OcaUint32 id, OcaBlob imageData);
void VerifyImage(OcaBlob verifyData);
void EndActiveImageUpdate();
void BeginPassiveComponentUpdate(OcaComponent component, OcaNetworkAddress serverAddress, OcaString updateFileName);
void EndUpdateProcess();
// Methods defined by OcaRoot
OcaBoolean GetLockable();
void SetLockNoReadWrite();
void Unlock();
OcaString GetRole();
void SetLockNoWrite();
OcaLockState GetLockState();
};