12 #include "../../gfx.h"
14 #if GFX_USE_GFILE && GFILE_NEED_CHIBIOSFS && GFX_USE_OS_CHIBIOS
18 static void ChibiOSBFSClose(
GFILE *f);
19 static int ChibiOSBFSRead(
GFILE *f,
void *buf,
int size);
20 static int ChibiOSBFSWrite(
GFILE *f,
const void *buf,
int size);
21 static gBool ChibiOSBFSSetpos(
GFILE *f, gFileSize pos);
22 static gFileSize ChibiOSBFSGetsize(
GFILE *f);
23 static gBool ChibiOSBFSEof(
GFILE *f);
25 static const GFILEVMT FsCHIBIOSVMT = {
26 GFSFLG_SEEKABLE|GFSFLG_WRITEABLE,
29 0, ChibiOSBFSClose, ChibiOSBFSRead, ChibiOSBFSWrite,
30 ChibiOSBFSSetpos, ChibiOSBFSGetsize, ChibiOSBFSEof,
32 #if GFILE_NEED_FILELISTS
37 #if CH_KERNEL_MAJOR == 2
38 #define FileStream BaseFileStream
39 #define fileStreamClose chFileStreamClose
40 #define fileStreamRead chSequentialStreamRead
41 #define fileStreamWrite chSequentialStreamWrite
42 #define fileStreamSeek chFileStreamSeek
43 #define fileStreamGetSize chFileStreamGetSize
46 static void ChibiOSBFSClose(
GFILE *f) {
47 fileStreamClose(((FileStream *)f->obj));
49 static int ChibiOSBFSRead(
GFILE *f,
void *buf,
int size) {
50 return fileStreamRead(((FileStream *)f->obj), (uint8_t *)buf, size);
52 static int ChibiOSBFSWrite(
GFILE *f,
const void *buf,
int size) {
53 return fileStreamWrite(((FileStream *)f->obj), (uint8_t *)buf, size);
55 static gBool ChibiOSBFSSetpos(
GFILE *f, gFileSize pos) {
56 fileStreamSeek(((FileStream *)f->obj), pos);
59 static gFileSize ChibiOSBFSGetsize(
GFILE *f) {
return (gFileSize)fileStreamGetSize(((FileStream *)f->obj)); }
60 static gBool ChibiOSBFSEof(
GFILE *f) {
return f->pos >= fileStreamGetSize(((FileStream *)f->obj)); }
66 if (!(f = _gfileFindSlot(mode)))
70 f->vmt = &FsCHIBIOSVMT;
71 f->obj = FileStreamPtr;
73 f->flags |= GFILEFLG_OPEN|GFILEFLG_CANSEEK;
GFILE file system header.
GFILE * gfileOpenChibiOSFileStream(void *FileStreamPtr, const char *mode)
Open file from a ChibiOS FileStream.
struct GFILE GFILE
A file pointer.