Example #1
0
File: main.c Project: drmrboy/RIOT
static int _sector_count(int argc, char **argv)
{
    (void)argc;
    (void)argv;

    printf("available sectors on card: %li\n", sdcard_spi_get_sector_count(card));
    return 0;
}
Example #2
0
/**
 * @brief                  perform miscellaneous low-level control functions
 *
 * @param[in]      pdrv    Physical drive nmuber (0..)
 * @param[in out]  cmd     Control code
 * @param[in]      sector  Buffer to send/receive control data
 *
 * @return                 RES_OK if no error occurred
 * @return                 RES_ERROR if an error occurred
 * @return                 RES_PARERR if an error occurred
 */
DRESULT disk_ioctl(BYTE pdrv, BYTE cmd, void *buff)
{
    #if (_USE_MKFS == 1)
    sdcard_spi_t *card = get_sd_card(pdrv);
    #endif

    switch (cmd) {
        #if (_FS_READONLY == 0)
        case CTRL_SYNC:
            /* r/w is always finished within r/w-functions of sdcard_spi */
            return RES_OK;
        #endif

        #if (_USE_MKFS == 1)
        case GET_SECTOR_COUNT:
            if ((card != NULL) && card->init_done) {
                *(DWORD *)buff = sdcard_spi_get_sector_count(card);
                return RES_OK;
            }
            else {
                return RES_ERROR;
            }

        case GET_BLOCK_SIZE:
            if ((card != NULL) && card->init_done) {
                /* erase block size in unit of sector */
                *(DWORD *)buff = sdcard_spi_get_au_size(card) / SD_HC_BLOCK_SIZE;
                return RES_OK;
            }
            *(DWORD *)buff = 0;
            return RES_ERROR;
        #endif

        #if (_MAX_SS != _MIN_SS)
        case GET_SECTOR_SIZE:
            *buff = SD_HC_BLOCK_SIZE;
            return RES_OK;
        #endif

        #if (_USE_TRIM == 1)
        case CTRL_TRIM:
            return RES_OK;
        #endif
    }

    return RES_PARERR;
}