diff --git a/demos/STM32/RT-VFS-FATFS/main.c b/demos/STM32/RT-VFS-FATFS/main.c index 44808d8b1..d6025f2a8 100644 --- a/demos/STM32/RT-VFS-FATFS/main.c +++ b/demos/STM32/RT-VFS-FATFS/main.c @@ -113,8 +113,8 @@ static const ShellCommand commands[] = { {NULL, NULL} }; -static const ShellConfig shell_cfg1 = { - (BaseSequentialStream *)&PORTAB_SD1, +static ShellConfig shell_cfg1 = { + NULL, commands }; @@ -174,6 +174,7 @@ static THD_FUNCTION(Thread1, arg) { */ int main(void) { msg_t msg; + vfs_file_node_t *file; static const evhandler_t evhndl[] = { InsertHandler, RemoveHandler, @@ -208,6 +209,13 @@ int main(void) { chSysHalt("VFS"); } + /* Opening a file for shell I/O.*/ + msg = vfsOpenFile("/dev/VSD1", &file); + if (msg != VFS_RET_SUCCESS) { + chSysHalt("VFS"); + } + shell_cfg1.sc_channel = vfsGetFileStream(file); + /* Creates the blinker thread.*/ chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL); @@ -217,6 +225,7 @@ int main(void) { chEvtRegister(&shell_terminated, &el2, 2); while (true) { if (shelltp == NULL) { + /* Spawning a shell.*/ shelltp = chThdCreateFromHeap(NULL, SHELL_WA_SIZE, "shell", NORMALPRIO + 1, shellThread, (void *)&shell_cfg1); diff --git a/os/vfs/include/vfssystem.h b/os/vfs/include/vfssystem.h index 70115f497..d38c096ea 100644 --- a/os/vfs/include/vfssystem.h +++ b/os/vfs/include/vfssystem.h @@ -110,6 +110,7 @@ extern "C" { msg_t vfsSetFilePosition(vfs_file_node_t *vfnp, vfs_offset_t offset); vfs_offset_t vfsGetFilePosition(vfs_file_node_t *vfnp); vfs_offset_t vfsGetFileSize(vfs_file_node_t *vfnp); + BaseSequentialStream *vfsGetFileStream(vfs_file_node_t *vfnp); #ifdef __cplusplus } #endif diff --git a/os/vfs/src/vfssystem.c b/os/vfs/src/vfssystem.c index 14a09d7f0..4c8f029ad 100644 --- a/os/vfs/src/vfssystem.c +++ b/os/vfs/src/vfssystem.c @@ -472,4 +472,19 @@ vfs_offset_t vfsGetFileSize(vfs_file_node_t *vfnp) { return vfnp->vmt->file_getsize((void *)vfnp); } +/** + * @brief Returns the inner stream associated to the file. + * + * @param[in] vfnp the pointer to the @p vfs_file_node_t object + * @return The current file size. + * + * @api + */ +BaseSequentialStream *vfsGetFileStream(vfs_file_node_t *vfnp) { + + chDbgAssert(vfnp->refs > 0U, "zero count"); + + return vfnp->vmt->get_stream((void *)vfnp); +} + /** @} */