Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

drivers: add support for MTDs emulated in RAM #19443

Merged
merged 10 commits into from
Apr 12, 2023
Prev Previous commit
Next Next commit
tests/littlefs2: use emulated MTD as test mockup
  • Loading branch information
gschorcht committed Apr 12, 2023
commit f724f34ac2366d19d89c1484fc99257d047e34a8
1 change: 1 addition & 0 deletions tests/pkg_littlefs2/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@ include ../Makefile.tests_common

USEPKG += littlefs2
USEMODULE += embunit
USEMODULE += mtd_emulated

include $(RIOTBASE)/Makefile.include
1 change: 1 addition & 0 deletions tests/pkg_littlefs2/app.config.test
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
CONFIG_MODULE_EMBUNIT=y
CONFIG_MODULE_MTD_EMULATED=y
CONFIG_PACKAGE_LITTLEFS2=y
88 changes: 7 additions & 81 deletions tests/pkg_littlefs2/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,13 @@
* CONFIG_USE_HARDWARE_MTD is defined (add CFLAGS=-DCONFIG_USE_HARDWARE_MTD to
* the command line to enable it */
#if defined(MTD_0) && IS_ACTIVE(CONFIG_USE_HARDWARE_MTD)
#define USE_MTD_0

#define _dev (MTD_0)

#else

#include "mtd_emulated.h"

/* Test mock object implementing a simple RAM-based mtd */
#ifndef SECTOR_COUNT
#define SECTOR_COUNT 16
Expand All @@ -41,84 +45,10 @@
#define PAGE_SIZE 64
#endif

static uint8_t dummy_memory[PAGE_PER_SECTOR * PAGE_SIZE * SECTOR_COUNT];

static int _init(mtd_dev_t *dev)
{
(void)dev;

return 0;
}

static int _read(mtd_dev_t *dev, void *buff, uint32_t addr, uint32_t size)
{
(void)dev;

if (addr + size > sizeof(dummy_memory)) {
return -EOVERFLOW;
}
memcpy(buff, dummy_memory + addr, size);

return 0;
}

static int _write(mtd_dev_t *dev, const void *buff, uint32_t addr, uint32_t size)
{
(void)dev;

if (addr + size > sizeof(dummy_memory)) {
return -EOVERFLOW;
}
if (size > PAGE_SIZE) {
return -EOVERFLOW;
}
memcpy(dummy_memory + addr, buff, size);

return 0;
}

static int _erase(mtd_dev_t *dev, uint32_t addr, uint32_t size)
{
(void)dev;
MTD_EMULATED_DEV(0, SECTOR_COUNT, PAGE_PER_SECTOR, PAGE_SIZE);

if (size % (PAGE_PER_SECTOR * PAGE_SIZE) != 0) {
return -EOVERFLOW;
}
if (addr % (PAGE_PER_SECTOR * PAGE_SIZE) != 0) {
return -EOVERFLOW;
}
if (addr + size > sizeof(dummy_memory)) {
return -EOVERFLOW;
}
memset(dummy_memory + addr, 0xff, size);

return 0;
}
#define _dev (&mtd_emulated_dev0.base)

static int _power(mtd_dev_t *dev, enum mtd_power_state power)
{
(void)dev;
(void)power;
return 0;
}

static const mtd_desc_t driver = {
.init = _init,
.read = _read,
.write = _write,
.erase = _erase,
.power = _power,
};

static mtd_dev_t dev = {
.driver = &driver,
.sector_count = SECTOR_COUNT,
.pages_per_sector = PAGE_PER_SECTOR,
.page_size = PAGE_SIZE,
.write_size = 1,
};

static mtd_dev_t *_dev = (mtd_dev_t*) &dev;
#endif /* MTD_0 */

static littlefs2_desc_t littlefs_desc;
Expand Down Expand Up @@ -416,10 +346,6 @@ static void tests_littlefs_statvfs(void)

Test *tests_littlefs(void)
{
#ifndef USE_MTD_0
memset(dummy_memory, 0xff, sizeof(dummy_memory));
#endif

EMB_UNIT_TESTFIXTURES(fixtures) {
new_TestFixture(tests_littlefs_format),
new_TestFixture(tests_littlefs_mount_umount),
Expand Down