This is an automated email from the ASF dual-hosted git repository. jerzy pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mynewt-core.git
commit 49f0c27a4a2c7e5359b9e2d7d19053e712a710f3 Author: Jerzy Kasenberg <[email protected]> AuthorDate: Mon Jun 23 19:56:29 2025 +0200 tinyusb/msc_fat_view: Use link table macros This package had some macros to access link tables that package utilizes. Now local version are replaced with global macros Signed-off-by: Jerzy Kasenberg <[email protected]> Signed-off-by: Jerzy Kasenberg <[email protected]> --- .../include/msc_fat_view/msc_fat_view.h | 72 +++++++--------------- hw/usb/tinyusb/msc_fat_view/src/msc_fat_view.c | 7 ++- 2 files changed, 26 insertions(+), 53 deletions(-) diff --git a/hw/usb/tinyusb/msc_fat_view/include/msc_fat_view/msc_fat_view.h b/hw/usb/tinyusb/msc_fat_view/include/msc_fat_view/msc_fat_view.h index 88aaa7af3..dcf8dfffe 100644 --- a/hw/usb/tinyusb/msc_fat_view/include/msc_fat_view/msc_fat_view.h +++ b/hw/usb/tinyusb/msc_fat_view/include/msc_fat_view/msc_fat_view.h @@ -22,6 +22,7 @@ #include <inttypes.h> #include <stdbool.h> +#include <os/link_tables.h> #define SECTOR_SIZE 512 @@ -89,62 +90,33 @@ void msc_fat_view_media_eject(void); */ void msc_fat_view_media_insert(void); -/* Section name for root entries */ -#define ROOT_DIR_SECTION __attribute__((section(".msc_fat_view_root_entry"), used)) - -/* Section name for write handlers */ -#define WRITE_HANDLER_SECTION __attribute__((section(".msc_fat_view_write_handlers"), used)) - /** * Macro to add static root entries */ -#define ROOT_DIR_ENTRY(entry, file_name, attr, size_fun, read_fun, write_fun, delete_fun, valid_fun) \ - file_entry_t entry = { \ - .name = file_name, \ - .attributes = attr, \ - .size = size_fun, \ - .read_sector = read_fun, \ - .write_sector = write_fun, \ - .delete_entry = delete_fun, \ - .valid = valid_fun, \ - }; \ - file_entry_t *const entry ## _ptr ROOT_DIR_SECTION = &entry; +#define ROOT_DIR_ENTRY(entry, file_name, attr, size_fun, read_fun, write_fun, \ + delete_fun, valid_fun) \ + file_entry_t entry = { \ + .name = file_name, \ + .attributes = attr, \ + .size = size_fun, \ + .read_sector = read_fun, \ + .write_sector = write_fun, \ + .delete_entry = delete_fun, \ + .valid = valid_fun, \ + }; \ + LINK_TABLE_ELEMENT_REF(msc_fat_view_root_entry, entry, entry) /** * Macro to add static write handlers */ -#define MSC_FAT_VIEW_WRITE_HANDLER(entry, _write_sector, _file_written) \ - msc_fat_view_write_handler_t entry = { \ - .write_sector = _write_sector, \ - .file_written = _file_written, \ - }; \ - msc_fat_view_write_handler_t *const entry ## _ptr WRITE_HANDLER_SECTION = &entry; - -#define TABLE_START(table) __ ## table ## _start__ -#define TABLE_END(table) __ ## table ## _end__ - -/** - * Simple inline loop for link table tables - * - * @param table - name of table as defined in pkg.link_tables: section - * @param type - type of element in table - * @param fun - function to call for each element of the table. - * Function should have prototype like this: void fun(type *element) - */ -#define FOR_EACH_ENTRY(type, table, fun) \ - { \ - extern type const TABLE_START(table)[]; \ - extern type const TABLE_END(table)[]; \ - type *entry; \ - for (entry = (type *)TABLE_START(table); \ - entry != TABLE_END(table); ++entry) { \ - fun(entry); \ - } \ - } - -#define FOR_TABLE(type, e, table) \ - extern type const TABLE_START(table)[]; \ - extern type const TABLE_END(table)[]; \ - for (type *e = (type *)TABLE_START(table); e != TABLE_END(table); ++e) +#define MSC_FAT_VIEW_WRITE_HANDLER(entry, _write_sector, _file_written) \ + msc_fat_view_write_handler_t entry = { \ + .write_sector = _write_sector, \ + .file_written = _file_written, \ + }; \ + LINK_TABLE_ELEMENT_REF(msc_fat_view_write_handlers, entry, entry) + +LINK_TABLE(file_entry_t *, msc_fat_view_root_entry) +LINK_TABLE(msc_fat_view_write_handler_t *, msc_fat_view_write_handlers) #endif /* __MSC_FAT_VIEW_H__ */ diff --git a/hw/usb/tinyusb/msc_fat_view/src/msc_fat_view.c b/hw/usb/tinyusb/msc_fat_view/src/msc_fat_view.c index d77b94718..83decb292 100644 --- a/hw/usb/tinyusb/msc_fat_view/src/msc_fat_view.c +++ b/hw/usb/tinyusb/msc_fat_view/src/msc_fat_view.c @@ -36,6 +36,7 @@ #include <console/console.h> #include <stream/stream.h> #include "coredump_files.h" +#include <os/link_tables.h> #if MYNEWT_VAL(BOOT_LOADER) #define BOOT_LOADER 1 @@ -1191,7 +1192,7 @@ msc_fat_view_write_unallocated_sector(uint32_t sector, uint8_t *buffer) return 512; } } - FOR_TABLE(msc_fat_view_write_handler_t *, p, msc_fat_view_write_handlers) { + LINK_TABLE_FOREACH(p, msc_fat_view_write_handlers) { if (*p == current_write_handler) { continue; } @@ -1238,7 +1239,7 @@ msc_fat_view_write_normal_sector(uint32_t sector, uint8_t *buffer) } static void -add_dir_entry(file_entry_t **entry) +add_dir_entry(file_entry_t *const *entry) { if ((*entry)->valid == NULL || (*entry)->valid(*entry) == MSC_FAT_VIEW_FILE_ENTRY_VALID) { msc_fat_view_add_dir_entry(*entry); @@ -1258,7 +1259,7 @@ init_disk_data(void) if (MYNEWT_VAL(MSC_FAT_VIEW_DROP_IMAGE_HERE)) { msc_fat_view_add_dir_entry(&drop_image_here); } - FOR_EACH_ENTRY(file_entry_t *, msc_fat_view_root_entry, add_dir_entry); + LINK_TABLE_FOREACH_CALL(msc_fat_view_root_entry, add_dir_entry); if (MYNEWT_VAL(MSC_FAT_VIEW_COREDUMP_FILES)) { msc_fat_view_add_coredumps();
