aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/dox/hal_ioblock.dox
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2014-12-08 10:37:17 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2014-12-08 10:37:17 +0000
commitc78228082b4e5b845a9c5553ab9e52766b468ab9 (patch)
tree3ebfc4780e72fc2d910c44627b15666c0ff259d4 /os/hal/dox/hal_ioblock.dox
parentcb80f2bfdd492bd6a77e7daba8e68804adede417 (diff)
downloadChibiOS-c78228082b4e5b845a9c5553ab9e52766b468ab9.tar.gz
ChibiOS-c78228082b4e5b845a9c5553ab9e52766b468ab9.tar.bz2
ChibiOS-c78228082b4e5b845a9c5553ab9e52766b468ab9.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@7560 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/hal/dox/hal_ioblock.dox')
-rw-r--r--os/hal/dox/hal_ioblock.dox104
1 files changed, 104 insertions, 0 deletions
diff --git a/os/hal/dox/hal_ioblock.dox b/os/hal/dox/hal_ioblock.dox
new file mode 100644
index 000000000..8adf8180e
--- /dev/null
+++ b/os/hal/dox/hal_ioblock.dox
@@ -0,0 +1,104 @@
+/*
+ ChibiOS - Copyright (C) 2006,2007,2008,2009,2010,
+ 2011,2012,2013,2014 Giovanni Di Sirio.
+
+ This file is part of ChibiOS/HAL
+
+ ChibiOS/HAL is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ ChibiOS/RT is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+/**
+ * @defgroup IO_BLOCK Abstract I/O Block Device
+ * @ingroup HAL_INTERFACES
+ *
+ * @section io_block_1 Driver State Machine
+ * The drivers implementing this interface shall implement the following
+ * state machine internally. Not all the driver functionalities can be used
+ * in any moment, any transition not explicitly shown in the following
+ * diagram has to be considered an error and shall be captured by an
+ * assertion (if enabled).
+ * @if LATEX_PDF
+ * @dot
+ digraph example {
+ size="5, 7";
+ rankdir="LR";
+
+ node [shape=circle, fontname=Sans, fontsize=8, fixedsize="true", width="0.9", height="0.9"];
+ edge [fontname=Sans, fontsize=8];
+
+ stop [label="BLK_STOP\nLow Power"];
+ uninit [label="BLK_UNINIT", style="bold"];
+ active [label="BLK_ACTIVE\nClock Enabled"];
+ connecting [label="BLK_CONN.ING\nConnecting"];
+ disconnecting [label="BLK_DISC.ING\nDisconnecting"];
+ ready [label="BLK_READY\nCard Ready"];
+ reading [label="BLK_READING\nReading"];
+ writing [label="BLK_WRITING\nWriting"];
+
+ uninit -> stop [label=" blkInit()", constraint=false];
+ stop -> stop [label="\nblkStop()"];
+ stop -> active [label="\nblkStart()"];
+ active -> stop [label="\nblkStop()"];
+ active -> active [label="\nblkStart()\nblkDisconnect()"];
+ active -> connecting [label="\nblkConnect()"];
+ connecting -> ready [label="\nconnection\nsuccessful"];
+ connecting -> ready [label="\nblkConnect()", dir="back"];
+ connecting -> active [label="\nconnection\nfailed"];
+ disconnecting -> ready [label="\nblkDisconnect()", dir="back"];
+ active -> disconnecting [label="\ndisconnection\nfinished", dir="back"];
+ ready -> reading [label="\nblkRead()"];
+ reading -> ready [label="\nread finished\nread error"];
+ ready -> writing [label="\nblkWrite()"];
+ writing -> ready [label="\nwrite finished\nwrite error"];
+ }
+ * @enddot
+ * @else
+ * @dot
+ digraph example {
+ rankdir="LR";
+
+ node [shape=circle, fontname=Sans, fontsize=8, fixedsize="true", width="0.9", height="0.9"];
+ edge [fontname=Sans, fontsize=8];
+
+ stop [label="BLK_STOP\nLow Power"];
+ uninit [label="BLK_UNINIT", style="bold"];
+ active [label="BLK_ACTIVE\nClock Enabled"];
+ connecting [label="BLK_CONN.ING\nConnecting"];
+ disconnecting [label="BLK_DISC.ING\nDisconnecting"];
+ ready [label="BLK_READY\nCard Ready"];
+ reading [label="BLK_READING\nReading"];
+ writing [label="BLK_WRITING\nWriting"];
+ syncing [label="BLK_SYNCING\nSynchronizing"];
+
+ uninit -> stop [label=" blkInit()", constraint=false];
+ stop -> stop [label="\nblkStop()"];
+ stop -> active [label="\nblkStart()"];
+ active -> stop [label="\nblkStop()"];
+ active -> active [label="\nblkStart()\nblkDisconnect()"];
+ active -> connecting [label="\nblkConnect()"];
+ connecting -> ready [label="\nconnection\nsuccessful"];
+ connecting -> ready [label="\nblkConnect()", dir="back"];
+ connecting -> active [label="\nconnection\nfailed"];
+ disconnecting -> ready [label="\nblkDisconnect()", dir="back"];
+ active -> disconnecting [label="\ndisconnection\nfinished", dir="back"];
+ ready -> reading [label="\nblkRead()"];
+ reading -> ready [label="\nread finished\nread error"];
+ ready -> writing [label="\nblkWrite()"];
+ writing -> ready [label="\nwrite finished\nwrite error"];
+ ready -> syncing [label="\nblkSync()"];
+ syncing -> ready [label="\nsynchronization finished"];
+ }
+ * @enddot
+ * @endif
+ */