Files
hsb/S - Software/0 - HSB MRTS Kathode-MCP/3 - Implementation/0 - Code/HAL/inc/CachedStorage.h
dvl 41ebc02741 Doxygen update
git-svn-id: https://svn.vbchaos.nl/svn/hsb/trunk@426 05563f52-14a8-4384-a975-3d1654cca0fa
2018-01-15 09:09:09 +00:00

219 lines
7.4 KiB
C

// -----------------------------------------------------------------------------
/// \file CachedStorage.h
/// \brief Generic memory cache
// -----------------------------------------------------------------------------
// Micro-Key bv
// Industrieweg 28, 9804 TG Noordhorn
// Postbus 92, 9800 AB Zuidhorn
// The Netherlands
// Tel: +31 594 503020
// Fax: +31 594 505825
// Email: support@microkey.nl
// Web: www.microkey.nl
// -----------------------------------------------------------------------------
/// $Revision$
/// $Author$
/// $Date$
// (c) 2017 Micro-Key bv
// -----------------------------------------------------------------------------
#ifndef _CACHEDEEPROM_H_
#define _CACHEDEEPROM_H_
/**
* CachedStorage implementation
* \defgroup CachedStorage Package CachedStorage
* \ingroup HAL
* @{
*/
// -----------------------------------------------------------------------------
// Include files
// -----------------------------------------------------------------------------
#include <stdint.h>
#include <stdbool.h>
#include <stdio.h>
#include "stm32f10x.h"
#include "platform.h"
// -----------------------------------------------------------------------------
// Constant and macro definitions
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// Type definitions.
// -----------------------------------------------------------------------------
/**
* \class CachedStorage
* The CachedStorage struct that can be used as an object
*/
struct CachedStorage
{
bool initialized; //!< Flag indicating initialisation status
unsigned int pageNumber; //!< The pageNumber of the memory section on
//!< which the cache is located.
//!< This is usually for FLASH or EEPROM
//!< devices and required for PAGE-ERASE
//!< functionality. Can be set to any random
//!< value if PAGE-ERASE is not necessary
size_t cacheSize; //!< The size of the cache in bytes
bool dirty; //!< Marker that cache has been updated
struct MemoryDevice* memoryDevice; //!< The memory device on which this cache
//!< is located
uint32_t* storage; //!< Pointer to the cache that is written to
//!< read from
uint32_t* tempBuffer; //!< Pointer to a temporary buffer for
//!< comparison
};
// -----------------------------------------------------------------------------
// Function declarations
// -----------------------------------------------------------------------------
/** CachedStorage_construct
* \briefConstructor for a new cached storage instance
* Function makes use of MALLOC
*
* Created by: mmi
* \memberof CachedStorage
*
* \param self The cache instance
* \param[in] memoryDevice The memory device to use on which the
* cache is located
* \param[in] pageNumber The pageNumber of the memory section on
* which the cache is located.
* This is usually for FLASH or EEPROM
* devices and required for PAGE-ERASE
* functionality. Can be set to any random
* value if PAGE-ERASE is not necessary
* \param[in] cacheSize The size of the cache.
* This value is 32bit oriented and
* NOT BYTE-WISE.
* The memory allocation will internally
* re-calculate to bytes
* \return ErrorStatus SUCCESS if constructor was successful
* ERROR otherwise
*
* \todo
*/
ErrorStatus CachedStorage_construct(struct CachedStorage* self, struct MemoryDevice* memoryDevice, unsigned int pageNumber, size_t cacheSize);
/** CachedStorage_destruct
* \brief Destructor for a cached storage instance
* Function makes use of FREE
*
* Created by: mmi
* \memberof CachedStorage
*
* \param self The cache instance to destruct
* \return void
*
* \todo
*/
void CachedStorage_destruct(struct CachedStorage* self);
/** CachedStorage_writeWord
* \brief Function to write a word (32bit) to cache
*
* Created by: mmi
* \memberof CachedStorage
*
* \param self The cache instance
* \param[in] offset Offset within the cache to put the data
* \param[in] value The value/data to write
* \return void
*
* \todo
*/
void CachedStorage_writeWord(struct CachedStorage* self, int offset, uint32_t value);
/** CachedStorage_writeBlob
* \brief Function to write a blob.
*
* Function to write a blob (any given format/amount of data) to cache; hence
* the void pointer. The function verifies cache boundaries using the offset and
* blob size blobsize is 32bit oriented, NOT BYTE
*
* Created by: mmi
* \memberof CachedStorage
*
* \param self The cache instance
* \param offset Offset within the cache to put the data
* \param blob Void pointer to the data to be written
* \param blobSize sizeof the blob structure. Give in 32bit,
* NOT IN BYTES
* \return void
*
* \todo
*/
void CachedStorage_writeBlob(struct CachedStorage* self, int offset, const void* blob, size_t blobSize);
/** CachedStorage_readWord
* \brief Function to read a word (32bit) from cache
*
* Created by: mmi
* \memberof CachedStorage
*
* \param self The cache instance
* \param[in] offset Offset within the cache to put the data
*
* \return uint32_t The read data
*
* \todo
*/
uint32_t CachedStorage_readWord(struct CachedStorage* self, int offset);
/** CachedStorage_readBlob
* \brief Function to read a blob
*
* Function to read a blob (any given format/amount of data) from cache; hence
* the void pointer.
* The function verifies cache boundaries using the offset
*
* Created by: mmi
* \memberof CachedStorage
*
* \param self The cache instance
* \param[in] offset Offset within the cache to put the data *
* \return void* Void pointer to the blob structure
*
* \todo
*/
const void* CachedStorage_readBlob(struct CachedStorage* self, int offset);
/** CachedStorage_commit
* \brief Function that puts the data from cache to the memory device.
*
* This function will verify that the content of the cache is actually different
* from the conent of the memory location. If data is equal, not write action
* will be performed
* In case of memory that needs PAGE-ERASE prior to write, the erase function
* will be called automatically.
*
* Created by: mmi
* \memberof CachedStorage
*
* \param self The cache instance
* \return void
*
* \todo
*/
void CachedStorage_commit(struct CachedStorage* self);
#endif
/** @} */