git-svn-id: https://svn.vbchaos.nl/svn/hsb/trunk@426 05563f52-14a8-4384-a975-3d1654cca0fa
219 lines
7.4 KiB
C
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
|
|
|
|
/** @} */
|