From b808cebdea9f3de768ac1451c4feb8fbb4aece51 Mon Sep 17 00:00:00 2001 From: fruchti Date: Sat, 23 May 2020 22:46:32 +0200 Subject: [PATCH] Automatically pick file name --- build-number.txt | 2 +- src/bmp.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++- src/bmp.h | 2 ++ 3 files changed, 55 insertions(+), 2 deletions(-) diff --git a/build-number.txt b/build-number.txt index fc3dff1..c13c4e8 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -545 +549 diff --git a/src/bmp.c b/src/bmp.c index 7e9b13e..bbf6c96 100644 --- a/src/bmp.c +++ b/src/bmp.c @@ -19,6 +19,51 @@ typedef struct uint16_t bits_per_pixel; } __attribute((packed)) BMP_CoreHeader_t; +const char* BMP_FilenamePrefix = "TCIM-"; + +int BMP_PickFileNumber(void) +{ + int maximum = -1; + DIR dp; + + if(f_opendir(&dp, "/") != FR_OK) + return -1; + + FILINFO finfo; + for(;;) + { + FRESULT rc = f_readdir(&dp, &finfo); + if(rc != FR_OK || finfo.fname[0] == 0) + break; + + // Check if the item is a directory + if(finfo.fattrib & AM_DIR) + continue; + + if(strncmp(finfo.fname, BMP_FilenamePrefix, strlen(BMP_FilenamePrefix)) + == 0) + { + int number = atoi(finfo.fname + strlen(BMP_FilenamePrefix)); + if(number > maximum) + maximum = number; + } + } + + return maximum + 1; +} + +void BMP_ConstructFilename(int number, char *buffer, unsigned int size) +{ + unsigned int prefix_length = strlen(BMP_FilenamePrefix); + memcpy(buffer, BMP_FilenamePrefix, prefix_length); + for(unsigned int i = size - 6; i >= prefix_length; i--) + { + buffer[i] = '0' + (number % 10); + number /= 10; + } + memcpy(buffer + size - 5, ".BMP", 5); +} + void BMP_Save(uint8_t *data, int width, int height) { FATFS fs; @@ -32,7 +77,13 @@ void BMP_Save(uint8_t *data, int width, int height) return; } - rc = f_open(&fp, "IMAGE.BMP", FA_WRITE | FA_CREATE_ALWAYS); + int file_number = BMP_PickFileNumber(); + if(file_number == -1) + return; + char filename[13]; + BMP_ConstructFilename(file_number, filename, sizeof(filename)); + + rc = f_open(&fp, filename, FA_WRITE | FA_CREATE_ALWAYS); if(rc) { return; diff --git a/src/bmp.h b/src/bmp.h index f11ae25..117d3aa 100644 --- a/src/bmp.h +++ b/src/bmp.h @@ -1,5 +1,7 @@ #pragma once #include +#include +#include void BMP_Save(uint8_t *data, int width, int height);