diff --git a/epicardium/epicardium.h b/epicardium/epicardium.h
index 2dd6b63fcb988d79a4f6bdcb050109c5a4f9e987..25c239acede55550e623711f42bb252045d43257 100644
--- a/epicardium/epicardium.h
+++ b/epicardium/epicardium.h
@@ -803,29 +803,22 @@ API(API_LIGHT_SENSOR_STOP, int epic_light_sensor_stop());
  */
 
 /** */
-API(
-	API_FILE_OPEN,
-	int epic_file_open(const char* filename, const char* modeString)
-);
+API(API_FILE_OPEN, int epic_file_open(
+	const char* filename, const char* modeString
+));
 
-/**
- * epic_file_close
- *
- * :param int fd: descriptor returned by epic_file_opendir
- *
- * :return: ``0`` on success, negative on error
- */
+/** */
 API(API_FILE_CLOSE, int epic_file_close(int fd));
 
 /** */
 API(API_FILE_READ, int epic_file_read(int fd, void* buf, size_t nbytes));
 
 /**
- * epic_file_write
+ * Write bytes to a file.
  *
- * :param int fd: descriptor returned by epic_file_open
- * :param const void* buf: data to write
- * :param size_t nbytes: no of bytes to write
+ * :param int fd: Descriptor returned by :c:func:`epic_file_open`.
+ * :param void* buf: Data to write.
+ * :param size_t nbytes: Number of bytes to write.
  *
  * :return: ``< 0`` on error, ``nbytes`` on success. (Partial writes don't occur on success!)
  *
@@ -860,8 +853,11 @@ enum epic_stat_type {
 	EPICSTAT_DIR,
 };
 
-#define EPICSTAT_MAX_PATH 	255 //conveniently the same as FF_MAX_LFN
-
+/**
+ * Maximum length of a path string (=255).
+ */
+#define EPICSTAT_MAX_PATH        255
+/* conveniently the same as FF_MAX_LFN */
 
 /** */
 struct epic_stat {
@@ -881,6 +877,7 @@ struct epic_stat {
 	/** Size in bytes. */
 	uint32_t size;
 
+	/** File Name. */
 	char name[EPICSTAT_MAX_PATH + 1];
 	uint8_t _reserved[12];
 };
@@ -898,26 +895,55 @@ API(API_FILE_STAT, int epic_file_stat(
 ));
 
 /**
- * open directory
+ * Open a directory, for enumerating its contents.
+ *
+ * Use :c:func:`epic_file_readdir` to iterate over the directories entries.
+ *
+ * **Example**:
+ *
+ * .. code-block:: cpp
+ *
+ *    #include "epicardium.h"
+ *
+ *    int fd = epic_file_opendir("/path/to/dir");
+ *
+ *    struct epic_stat entry;
+ *    for (;;) {
+ *            epic_file_readdir(fd, &entry);
  *
- * :param char* path: directory to open
+ *            if (entry.type == EPICSTAT_NONE) {
+ *                    // End
+ *                    break;
+ *            }
+ *
+ *            printf("%s\n", entry.name);
+ *    }
+ *
+ *    epic_file_close(fd);
+ *
+ * :param char* path: Directory to open.
  *
  * :return: ``> 0`` on success, negative on error
  */
 API(API_FILE_OPENDIR, int epic_file_opendir(const char* path));
 
 /**
- * readdir
+ * Read one entry from a directory.
+ *
+ * Call :c:func:`epic_file_readdir` multiple times to iterate over all entries
+ * of a directory.  The end of the entry list is marked by returning
+ * :c:data:`EPICSTAT_NONE` as the :c:member:`epic_stat.type`.
  *
- * :param int fd: descriptor returned by epic_file_opendir
- * :param epic_stat* stat: pointer to result - pass NULL to reset iteration offset of fd
+ * :param int fd: Descriptor returned by :c:func:`epic_file_opendir`.
+ * :param epic_stat* stat: Pointer where to store the result.  Pass NULL to
+ *    reset iteration offset of ``fd`` back to the beginning.
  *
  * :return: ``0`` on success, negative on error
  */
 API(API_FILE_READDIR, int epic_file_readdir(int fd, struct epic_stat* stat));
 
 /**
- * epic_file_unlink
+ * Unlink (remove) a file.
  *
  * :param char* path: file to delete
  *
@@ -926,7 +952,6 @@ API(API_FILE_READDIR, int epic_file_readdir(int fd, struct epic_stat* stat));
 API(API_FILE_UNLINK, int epic_file_unlink(const char* path));
 
 
-
 /**
  * RTC
  * ===