file/file_list/main.c
/*******************************************************************************
* # License
* Copyright 2019 Silicon Laboratories Inc. www.silabs.com
*******************************************************************************
*
* The licensor of this software is Silicon Laboratories Inc. Your use of this
* software is governed by the terms of Silicon Labs Master Software License
* Agreement (MSLA) available at
* www.silabs.com/about-us/legal/master-software-license-agreement. This
* software is distributed to you in Source Code format and is governed by the
* sections of the MSLA applicable to Source Code.
*
******************************************************************************/
/*
* Documentation for this app is available online.
* See https://docs.silabs.com/gecko-os/4/standard/latest/sdk/examples/file/file-list
*/
#include "gos.h"
#define APPLICATION_START_LINE "\r\n\r\nFile Listing example app starting ..."
/*************************************************************************************************/
{
GOS_LOG(APPLICATION_START_LINE);
display_file_stats();
list_extended_files_only();
list_webapp_files();
list_with_paging();
GOS_LOG("Done");
}
/*************************************************************************************************/
static void display_file_stats(void)
{
gos_result_t result;
gos_file_system_stats_t stats;
{
GOS_LOG("Failed to get file stats: %d", result);
return;
}
}
/*************************************************************************************************/
static void list_extended_files_only(void)
{
gos_result_t result;
gos_file_t *file_list;
GOS_LOG("\r\nListing files on extended flash...");
{
GOS_LOG("Failed to get file listing: %d", result);
return;
}
print_file_list(file_list);
gos_file_destroy_list(file_list);
}
/*************************************************************************************************/
static void list_webapp_files(void)
{
gos_result_t result;
gos_file_t *file_list;
params.location_mask = GOS_FILE_LOCATION_MASK_EXTENDED;
GOS_LOG("\r\nListing webapp files...");
{
GOS_LOG("Failed to get file listing: %d", result);
return;
}
print_file_list(file_list);
gos_file_destroy_list(file_list);
}
/*************************************************************************************************/
static void list_with_paging(void)
{
gos_result_t result;
gos_file_t *file_list;
params.location_mask = GOS_FILE_LOCATION_MASK_EXTENDED;
GOS_LOG("\r\nListing files on extended flash with 'paging' ...");
for (int i = 1;; ++i)
{
{
GOS_LOG("Failed to get file listing: %d", result);
return;
}
else if (file_list == NULL)
{
break;
}
GOS_LOG("Page: %d", i);
// Update the offset to the NEXT sector after the last file in the list
params.page.offset = print_file_list(file_list) + 1;
gos_file_destroy_list(file_list);
}
}
/*************************************************************************************************/
{
uint32_t max_sector = 0;
if (file_list == NULL)
{
GOS_LOG("No files found!");
}
else
{
GOS_LOG(" # Name Handle Size Checksum");
int i = 0;
{
char buffer[128];
char *ptr = buffer;
ptr += sprintf(ptr, "%2d ", i);
ptr += sprintf(ptr, "%32s ", file->name);
ptr += sprintf(ptr, "%7u ", (unsigned int)file->size);
ptr += sprintf(ptr, "%08X", (unsigned int)file->checksum);
GOS_LOG("%s", buffer);
if (max_sector < GOS_FILE_HANDLE_SECTOR(file->handle))
{
max_sector = GOS_FILE_HANDLE_SECTOR(file->handle);
}
}
}
return max_sector;
}