Platform Package reference: Function EwRegisterFlashAreaReader()
Description of the function EwRegisterFlashAreaReader() available in Platform Packages for C compatible target systems. This function is intended to be used when integrating the Embedded Wizard created GUI application with the underlying graphics subsystem, graphics hardware or other external GUI applications coexisting on the same system.
Declaration
void EwRegisterFlashAreaReader
(
XFlashAreaReaderProc aReaderProc,
void* aStartAddress,
void* aEndAddress,
int aBlockSize
);
typedef const void* (*XFlashAreaReaderProc)
(
const void* aAddress,
int aSize
);
Parameters
aReaderProc
User implemented function to read Flash memory areas into internal buffers. This function has to conform the above type declaration XFlashAreaReaderProc.
aStartAddress
Start address of the Flash area to take in account.
aEndAddress
End address of the Flash area to take in account.
aBlockSize
Size of the page or block, the function will read from the Flash memory. The value is expressed in bytes and it should be a power of two value (e.g. 512, 1024, ... 4096, etc.).
aAddress
The address to load the corresponding area from the Flash.
aSize
The size of the area intended for the access expressed in bytes. If this parameter is greater than 0 (zero), the function should load as much as necessary Flash pages to fully include the area aAddress .. aAddress + aSize. If this parameter is less or equal 0 (zero), the function should limit to load only the single Flash page containing aAddress.
Discussion
The function EwRegisterFlashAreaReader() registers a specified memory area aStartAddress..aEndAddress as belonging to Flash memory not intended to be directly addressed by the CPU. In order to access this Flash memory, the respective Flash pages need to be loaded first into internal buffer. This reading operation has to be handled by external function, specified in the first parameter aReaderProc. The implementation of the function is up to the user.
Embedded Wizard invokes the specified external aReaderProc function automatically during the decompression of bitmap, font or string data to map the Flash contents into the CPU address space. Also, the function is used for bitmaps stored in DirectAccess mode if the bitmap pixel data is not directly accessible by the CPU. In all cases, the not directly accessible Flash data can be processed by Embedded Wizard - though at the expense of performance. Please note: in case of the above mentioned bitmap DirectAccess mode, it is obligatory to recompile the Graphics Engine with the C macro EW_USE_READER_FOR_CONST_SURFACES being defined. If you are using one of our prepared Build Environments you can configure this macro in the file ewconfig.h.
Embedded Wizard allows only one reader to be registered at the same time. Invoking the function EwRegisterFlashAreaReader() twice with different start/end addresses reports an error. In order to remove the previously registered reader, invoke the function with the previously specified start and end addresses and NULL in the aReaderProc parameter. The function EwRegisterFlashAreaReader() should be invoked before invoking EwInitGraphicsEngine(). If the reader is intended to map contents of a Blob file, the function has to be invoked before EwSetBlobData().
The implementation of the external function specified in the parameter aReaderProc should perform following steps:
1.Calculate from the given address aAddress and size aSize the corresponding pages within the Flash memory. The size of a page should correspond to the value specified in the parameter aBlockSize.
2.Load all pages into an internal, static buffer. If there are more than two pages loaded, ensure the pages are stored in order according to their addresses. For optimization purpose it is recommended, that the function caches the read data to prevent the flash contents from being loaded repeatedly. It is also recommended to cache several (for example 4) recently accessed Flash pages.
3.Estimate the memory cell within the internal buffer corresponding to the originally given address aAddress.
4.Return a pointer to the estimated memory cell so that the caller can use it to read the data as if the Flash memory would be accessible by the CPU.
5.If the loading fails or aAddress does not lie within the Flash memory, the function should return aAddress without any changes on it.