| #pragma once |
| |
| #include "hei_includes.hpp" |
| #include "hei_isolation_data.hpp" |
| #include "chip_data/hei_chip_data.hpp" |
| |
| namespace libhei |
| { |
| |
| /** |
| * @brief This is the main API for Hardware Error Isolation (aka the isolator). |
| * |
| * The intended flow is to: |
| * - Create a singleton instance of an Isolator object. |
| * - Use initialize() to input each necessary Chip Data File (provided by the |
| * user application). |
| * - Call isolate() each time you want to find all active errors being |
| * reported by a chip. |
| * - Once isolation is no longer needed, the Isolator singleton can be deleted |
| * to free up internal resources. |
| * |
| * The purpose of the singleton instance is to avoid initializing the object |
| * each time isolation is required. The data provided by the Chip Data Files is |
| * static. So reinitializing would be a waste of time, unless for some reason |
| * the Chip Data Files themselves are updated, which would require |
| * reinitialization anyway. Of course, leaving the object in memory chews up |
| * resources. So, some users may need to weigh performance vs. memory usage. |
| */ |
| class Isolator |
| { |
| public: |
| |
| /** @brief Default constructor. */ |
| Isolator() = default; |
| |
| /** @brief Destructor. */ |
| ~Isolator() = default; |
| |
| /** @brief Copy constructor. */ |
| Isolator( const Isolator & ) = delete; |
| |
| /** @brief Assignment operator. */ |
| Isolator & operator=( const Isolator & ) = delete; |
| |
| /** |
| * @brief Initializes internal isolation objects based on data from the |
| * given Chip Data File. |
| * |
| * This function only takes one Chip Data File at a time. Therefore, the |
| * user application must call this function for each Chip Data File required |
| * for isolation. |
| * |
| * Storage and management of the Chip Data Files will vary per user |
| * application. Therefore, the user application is responsible for loading |
| * the Chip Data Files into memory, as needed, and providing the location |
| * and size of the data. |
| * |
| * Once initialization has successfully completed with a Chip Data File, the |
| * file is no longer needed in memory. |
| * |
| * Details of the Chip Data File format can be found in CHIP_DATA.md. |
| * |
| * @param i_buffer A pointer to the buffer containing a single Chip |
| * Data File. |
| * |
| * @param i_bufferSize The size (in bytes) of the target Chip Data File. |
| * |
| * @param i_forceInit It is possible the user application could call this |
| * function for a chip type that has already been |
| * initialized. This is useful if for some reason the |
| * Chip Data File is for a chip type has been updated. |
| * If this function is called and a chip type has |
| * already been initialized: |
| * - false (default), the function will return |
| * RC_CDF_INITIALIZED and exit. |
| * - true, the function will delete previous isolation |
| * objects for this chip type and reinitialize. |
| * |
| * @return RC_SUCCESS or RC_CDF_INVALID or RC_CDF_INITIALIZED |
| */ |
| ReturnCode initialize( void * i_buffer, size_t i_bufferSize, |
| bool i_forceInit = false ); |
| |
| /** |
| * @brief Isolates all active hardware errors found on the given chip. |
| * |
| * This functions requires initialize() to be called with the Chip Data File |
| * corresponding to the given chip type. |
| * |
| * @param i_chip This is simply a pointer to a user application object |
| * that represents the target chip. The isolator does not |
| * know anything about this object or how to use it. This |
| * parameter's only purpose is to eventually get passed |
| * back to the user application in a deviceRead() |
| * operation. |
| * |
| * @param i_chipType Each Chip Data File contains a unique chip type |
| * identifier. The user application will need to input |
| * this value so the isolator will know which set of the |
| * isolation objects to reference. |
| * |
| * @param o_isoData This return object will contain a list of all active |
| * hardware errors on this chip, the contents of any |
| * registers associated with the active errors, and any |
| * other data that can be useful for debug. |
| * |
| * @return RC_SUCCESS or RC_CHIP_DATA_MISSING |
| */ |
| ReturnCode isolate( void * i_chip, ChipType_t i_chipType, |
| IsolationData & o_isoData ); |
| |
| private: |
| |
| }; // end class Isolator |
| |
| } // end namespace libhei |