diff --git a/src/gfile/gfile.h b/src/gfile/gfile.h index cc1e9c4b..ad590fbc 100644 --- a/src/gfile/gfile.h +++ b/src/gfile/gfile.h @@ -307,20 +307,21 @@ extern "C" { #if (GFILE_NEED_CHIBIOSFS && GFX_USE_OS_CHIBIOS) || defined(__DOXYGEN__) /** - * @brief Open file from a ChibiOS BaseFileStream + * @brief Open file from a ChibiOS FileStream * - * @param[in] BaseFileStreamPtr The BaseFileStream to open as a GFILE + * @param[in] FileStreamPtr The BaseFileStream (ChibiOS V2) or FileStream (ChibiOS V3) to open as a GFILE * @param[in] mode The mode. * * @return Valid GFILE on success, 0 otherwise * * @note The modes are the same modes as in @p gfileOpen(). The - * open mode is NOT compared against the BaseFileStream capabilities. + * open mode is NOT compared against the FileStream capabilities. * @note Supported operations are: read, write, getpos, setpos, eof and getsize * * @api */ - GFILE * gfileOpenBaseFileStream(void *BaseFileStreamPtr, const char *mode); + GFILE * gfileOpenChibiOSFileStream(void *FileStreamPtr, const char *mode); + #define gfileOpenBaseFileStream(f,m) gfileOpenChibiOSFileStream(f,m) #endif #if GFILE_NEED_MEMFS || defined(__DOXYGEN__) diff --git a/src/gfile/gfile_fs_chibios.c b/src/gfile/gfile_fs_chibios.c index 72826e28..9c3b156f 100644 --- a/src/gfile/gfile_fs_chibios.c +++ b/src/gfile/gfile_fs_chibios.c @@ -6,7 +6,7 @@ */ /******************************************************** - * The ChibiOS BaseFileStream file-system + * The ChibiOS FileStream file-system ********************************************************/ #include "gfx.h" @@ -34,23 +34,32 @@ static const GFILEVMT FsCHIBIOSVMT = { #endif }; +#if CH_KERNEL_MAJOR == 2 + #define FileStream BaseFileStream + #define fileStreamClose chFileStreamClose + #define fileStreamRead chSequentialStreamRead + #define fileStreamWrite chSequentialStreamWrite + #define fileStreamSeek chFileStreamSeek + #define fileStreamGetSize chFileStreamGetSize +#endif + static void ChibiOSBFSClose(GFILE *f) { - chFileStreamClose(((BaseFileStream *)f->obj)); + fileStreamClose(((FileStream *)f->obj)); } static int ChibiOSBFSRead(GFILE *f, void *buf, int size) { - return chSequentialStreamRead(((BaseFileStream *)f->obj), (uint8_t *)buf, size); + return fileStreamRead(((FileStream *)f->obj), (uint8_t *)buf, size); } static int ChibiOSBFSWrite(GFILE *f, const void *buf, int size) { - return chSequentialStreamWrite(((BaseFileStream *)f->obj), (uint8_t *)buf, size); + return fileStreamWrite(((FileStream *)f->obj), (uint8_t *)buf, size); } static bool_t ChibiOSBFSSetpos(GFILE *f, long int pos) { - chFileStreamSeek(((BaseFileStream *)f->obj), pos); + fileStreamSeek(((FileStream *)f->obj), pos); return TRUE; } -static long int ChibiOSBFSGetsize(GFILE *f) { return chFileStreamGetSize(((BaseFileStream *)f->obj)); } -static bool_t ChibiOSBFSEof(GFILE *f) { return f->pos >= chFileStreamGetSize(((BaseFileStream *)f->obj)); } +static long int ChibiOSBFSGetsize(GFILE *f) { return fileStreamGetSize(((FileStream *)f->obj)); } +static bool_t ChibiOSBFSEof(GFILE *f) { return f->pos >= fileStreamGetSize(((FileStream *)f->obj)); } -GFILE * gfileOpenBaseFileStream(void *BaseFileStreamPtr, const char *mode) { +GFILE * gfileOpenChibiOSFileStream(void *FileStreamPtr, const char *mode) { GFILE * f; // Get an empty file and set the flags @@ -59,7 +68,7 @@ GFILE * gfileOpenBaseFileStream(void *BaseFileStreamPtr, const char *mode) { // File is open - fill in all the details f->vmt = &FsCHIBIOSVMT; - f->obj = BaseFileStreamPtr; + f->obj = FileStreamPtr; f->pos = 0; f->flags |= GFILEFLG_OPEN|GFILEFLG_CANSEEK; return f; diff --git a/src/gos/gos_chibios.c b/src/gos/gos_chibios.c index faa007b5..62f5d8ee 100644 --- a/src/gos/gos_chibios.c +++ b/src/gos/gos_chibios.c @@ -28,7 +28,9 @@ #if !CH_CFG_USE_SEMAPHORES #error "GOS: CH_CFG_USE_SEMAPHORES must be defined in chconf.h" #endif - + +#else + #error "GOS: Unsupported version of ChibiOS" #endif void _gosInit(void)