#ifdef QUECTEL_FOTA // quectel use file system to storage fotaPackage #ifndef _LFS_CONFIG_H_ #define _LFS_CONFIG_H_ // System includes #include #include "common.h" //#include "utils.h" //#include "lfs_trace.h" // Macros, may be replaced by system specific wrappers. Arguments to these // macros must not have side-effects as the macros can be removed for a smaller // code footprint // Logging functions #ifndef LFS_NO_DEBUG #define LFS_DEBUG(fmt, ...) \ uart_printf("lfs debug:%d: " fmt "\n", __LINE__, __VA_ARGS__) #else #define LFS_DEBUG(fmt, ...) #endif #ifndef LFS_NO_WARN #define LFS_WARN(fmt, ...) \ uart_printf("lfs warn:%d: " fmt "\n", __LINE__, __VA_ARGS__) #else #define LFS_WARN(fmt, ...) #endif #ifndef LFS_NO_ERROR #define LFS_ERROR(fmt, ...) \ uart_printf("lfs error:%d: " fmt "\n", __LINE__, __VA_ARGS__) #else #define LFS_ERROR(fmt, ...) #endif // Runtime assertions #ifndef LFS_NO_ASSERT #define LFS_ASSERT(test) ASSERT(test) #else #define LFS_ASSERT(test) #endif // Builtin functions, these may be replaced by more efficient // toolchain-specific implementations. LFS_NO_INTRINSICS falls back to a more // expensive basic C implementation for debugging purposes // Convert from 32-bit little-endian to native order #if 0 static inline UINT32 lfs_fromle32(UINT32 a) { #if !defined(LFS_NO_INTRINSICS) && ( \ (defined( BYTE_ORDER ) && BYTE_ORDER == ORDER_LITTLE_ENDIAN ) || \ (defined(__BYTE_ORDER ) && __BYTE_ORDER == __ORDER_LITTLE_ENDIAN ) || \ (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)) return a; #elif !defined(LFS_NO_INTRINSICS) && ( \ (defined( BYTE_ORDER ) && BYTE_ORDER == ORDER_BIG_ENDIAN ) || \ (defined(__BYTE_ORDER ) && __BYTE_ORDER == __ORDER_BIG_ENDIAN ) || \ (defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)) return __builtin_bswap32(a); #else return (((UINT8*)&a)[0] << 0) | (((UINT8*)&a)[1] << 8) | (((UINT8*)&a)[2] << 16) | (((UINT8*)&a)[3] << 24); #endif } // Convert to 32-bit little-endian from native order static inline UINT32 lfs_tole32(UINT32 a) { return lfs_fromle32(a); } #else #define lfs_fromle32(a) a #define lfs_tole32(a) a #endif // Allocate memory, only used if buffers are not provided to littlefs #if 0 static inline void *lfs_malloc(size_t size) { #ifndef LFS_NO_MALLOC return rt_malloc(size); #else return NULL; #endif } // Deallocate memory, only used if buffers are not provided to littlefs static inline void lfs_free(void *p) { #ifndef LFS_NO_MALLOC rt_free(p); #endif } #else #define lfs_malloc malloc #define lfs_free free //extern void *malloc( size_t Size ); //extern void free( void *p ); #endif #endif #endif