diff options
author | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2012-05-09 17:00:03 +0000 |
---|---|---|
committer | gdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4> | 2012-05-09 17:00:03 +0000 |
commit | 7f87eee586adf22f28b1687ef92051065a0a5ee5 (patch) | |
tree | a3d199558c7671e31e9ebac4f79f8f4596e2493e /os/hal/src/sdc.c | |
parent | 8f8b7f2c69575736da9004c8dc45c770b0f08c48 (diff) | |
download | ChibiOS-7f87eee586adf22f28b1687ef92051065a0a5ee5.tar.gz ChibiOS-7f87eee586adf22f28b1687ef92051065a0a5ee5.tar.bz2 ChibiOS-7f87eee586adf22f28b1687ef92051065a0a5ee5.zip |
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@4178 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/hal/src/sdc.c')
-rw-r--r-- | os/hal/src/sdc.c | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/os/hal/src/sdc.c b/os/hal/src/sdc.c index 6e9dcabd4..483263776 100644 --- a/os/hal/src/sdc.c +++ b/os/hal/src/sdc.c @@ -43,6 +43,20 @@ /* Driver local variables. */
/*===========================================================================*/
+/**
+ * @brief Virtual methods table.
+ */
+static const struct MMCSDBlockDeviceVMT sdc_vmt = {
+ (bool_t (*)(void *))sdc_lld_is_card_inserted,
+ (bool_t (*)(void *))sdc_lld_is_write_protected,
+ (bool_t (*)(void *))sdcConnect,
+ (bool_t (*)(void *))sdcDisconnect,
+ (bool_t (*)(void *, uint32_t, uint8_t *, uint32_t))sdcRead,
+ (bool_t (*)(void *, uint32_t, const uint8_t *, uint32_t))sdcWrite,
+ (bool_t (*)(void *))sdcSync,
+ (bool_t (*)(void *, BlockDeviceInfo *))sdcGetInfo
+};
+
/*===========================================================================*/
/* Driver local functions. */
/*===========================================================================*/
@@ -147,6 +161,7 @@ void sdcInit(void) { */
void sdcObjectInit(SDCDriver *sdcp) {
+ sdcp->vmt = &sdc_vmt;
sdcp->state = SDC_STOP;
sdcp->errors = SDC_NO_ERROR;
sdcp->config = NULL;
@@ -486,6 +501,63 @@ sdcflags_t sdcGetAndClearErrors(SDCDriver *sdcp) { return flags;
}
+/**
+ * @brief Waits for card idle condition.
+ *
+ * @param[in] sdcp pointer to the @p SDCDriver object
+ *
+ * @return The operation status.
+ * @retval FALSE the operation succeeded.
+ * @retval TRUE the operation failed.
+ *
+ * @api
+ */
+bool_t sdcSync(SDCDriver *sdcp) {
+
+ chDbgCheck(sdcp != NULL, "sdcSync");
+
+ chSysLock();
+ if (sdcp->state != SDC_READY) {
+ chSysUnlock();
+ return TRUE;
+ }
+ chSysUnlock();
+
+ /* TODO: implement.*/
+
+ return FALSE;
+}
+
+/**
+ * @brief Returns the media info.
+ *
+ * @param[in] sdcp pointer to the @p SDCDriver object
+ * @param[out] bdip pointer to a @p BlockDeviceInfo structure
+ *
+ * @return The operation status.
+ * @retval FALSE the operation succeeded.
+ * @retval TRUE the operation failed.
+ *
+ * @api
+ */
+bool_t sdcGetInfo(SDCDriver *sdcp, BlockDeviceInfo *bdip) {
+
+
+ chDbgCheck((sdcp != NULL) && (bdip != NULL), "sdcGetInfo");
+
+ chSysLock();
+ if (sdcp->state != SDC_READY) {
+ chSysUnlock();
+ return TRUE;
+ }
+ chSysUnlock();
+
+ bdip->blk_num = 0; /* NOTE: To be implemented.*/
+ bdip->blk_size = SDMMC_BLOCK_SIZE;
+
+ return FALSE;
+}
+
#endif /* HAL_USE_SDC */
/** @} */
|