Utility functions for download firmware
Added set of utility functions to be used within the classes for
managing the PSU firmware updates. Here is a breakdown of the key
functions:
- getDevicePath():
Construct the PSU device path using I2C bus and address.
- getClassInstance():
Determines the appropriate updater class to use based on PSU model
number.
- getFWFilenamePath():
Searches a directory for a firmware file matching a specified prefix
and file extension (.bin or .hex).
- calculateCRC8():
Computes the CRC-8 checksum for transferred data.
- delay():
Pauses execution for a specified number of milliseconds.
- bigEndianToLittleEndian():
Converts a 32-bit value from big-endian to little-endian.
- validateFWFile():
Checks if a firmware file exists and is non-empty.
- openFirmwareFile():
Opens a firmware file in binary mode, returning a file stream if
successful.
- readFirmwareBytes():
Reads specified number of data bytes from a firmware file into a
buffer. Return data read or null to the caller.
- usePsuJsonFile():
Wrapper to check the existence of the PSU JSON file.
- Class accessors to private data:
getPsuInventoryPath(): Accessor for PSU inventory path.
getDevPath(): Accessor for device path.
getDevName(): Accessor for device name.
getImageDir(): Accessor for image directory.
getI2C(): I2C interface accessor.
Tested every function manually:
- getDevicePath() (using busctl):
- Validate I2C bus and address values through psuInventoryPath
validate expected result
- Modified psuInventoryPath to invalid path
validate returned invalid path.
- getClassInstance():
- Validate with matching model number the function instantiate
appropriate class.
- Validate the default class instantiated.
- getFWFilenamePath():
- Validate return of the correct file name in the PSU FW directory
- Validate null returns when FW files don't exist
- calculaterCRC8():
- Validate single byte 0x0 result 0x0, single byte 0x01 result 0x07
- delay():
- Verified the task suspend execution.
- bigEndianToLittleEndian():
- Verified input 0x12345678 resulted in 0x78563412
- validateFWFile():
- Validate the existence of the file otherwise an error is logged
- Validate the file size is greater than 0 otherwise an error is
logged.
- openFirmwareFile():
- Validate ifstream object is returned and was able to read from.
- Validate error logged if the file name is null
- validate error logged when unable to open the file
- readFirmwareBytes():
- Validate data read from FW file
- Validate number of bytes read.
- usePsuJsonFile():
- Added JSON file to simulator and validated true return.
Change-Id: I0b8b24ae7d37724dab608d2c4977c1b42d4e1632
Signed-off-by: Faisal Awada <faisal@us.ibm.com>
diff --git a/tools/power-utils/main.cpp b/tools/power-utils/main.cpp
index eb81db4..f240ece 100644
--- a/tools/power-utils/main.cpp
+++ b/tools/power-utils/main.cpp
@@ -71,7 +71,7 @@
if (!updateArguments.empty())
{
assert(updateArguments.size() == 2);
- if (updater::update(updateArguments[0], updateArguments[1]))
+ if (updater::update(bus, updateArguments[0], updateArguments[1]))
{
ret = "Update successful";
}