nacapet/src/storage/storage.cpp
Nacho e138334e06 Na, poca cosa
- Soporte para varios bichos  a la vez
- Algunos bugs menos
2025-06-01 01:54:36 +02:00

118 lines
3.1 KiB
C++

#include "storage.h"
#include "memory/memory.h"
#include "defs/sprite_data.h"
const char* TAG_S = "[STORAGE]";
void storage_init() {
if (!SPIFFS.begin(true)) {
printf("%s Failed to mount file system\n", TAG_S);
} else {
printf("%s File system mounted successfully\n", TAG_S);
}
}
void storage_readFile(const char* path, struct SpriteData* spriteData) {
File file = SPIFFS.open(path, "r");
if (!file) {
printf("%s Failed to open file for reading\n", TAG_S);
return;
}
size_t bytesRead = 0;
size_t fileSize = file.size();
uint8_t width, height, spriteNumber;
bytesRead += file.read(&width, 1);
bytesRead += file.read(&height, 1);
bytesRead += file.read(&spriteNumber, 1);
if (spriteData->spriteData != NULL) {
memory_free(spriteData);
}
spriteData->spriteWidth = width;
spriteData->spriteHeight = height;
spriteData->spriteNumber = spriteNumber;
spriteData->spriteData = memory_allocate(spriteData->spriteNumber, spriteData->spriteWidth, spriteData->spriteHeight);
printf(
"%s Read header: width=%d, height=%d, numSprites=%d\n",
TAG_S, spriteData->spriteWidth, spriteData->spriteHeight, spriteData->spriteNumber
);
fileSize = (fileSize - 3) / sizeof(uint16_t);
size_t bufferSize = spriteData->spriteNumber * spriteData->spriteWidth * spriteData->spriteHeight;
uint8_t highByte;
uint8_t lowByte;
for (int sprN = 0; sprN < spriteData->spriteNumber; sprN++) {
for (int i = 0; i < spriteData->spriteWidth * spriteData->spriteHeight; i++) {
bytesRead += file.read(&highByte, 1);
bytesRead += file.read(&lowByte, 1);
uint16_t pixel = (highByte << 8) | lowByte;
if (i < bufferSize) {
(spriteData->spriteData)[sprN][i] = pixel;
} else {
printf("%s Buffer overflow, skipping pixel\n", TAG_S);
break;
}
}
}
printf("%s Read %zu bytes from file %s\n", TAG_S, bytesRead, path);
file.close();
}
void storage_initBackground(const char* path, TFT_eSprite& bg) {
File file = SPIFFS.open(path, "r");
if (!file) {
printf("%s Failed to open file for reading\n", TAG_S);
return;
}
size_t bytesRead = 0;
size_t fileSize = file.size();
uint8_t width;
uint8_t height;
bytesRead += file.read(&width, 1);
bytesRead += file.read(&height, 1);
printf("%s Read header: width=%d, height=%d\n", TAG_S, width, height);
fileSize = (fileSize - 2) / sizeof(uint16_t);
bg.createSprite(width, height);
for(int i = 0; i < width * height; i++) {
uint8_t highByte;
uint8_t lowByte;
bytesRead += file.read(&highByte, 1);
bytesRead += file.read(&lowByte, 1);
uint16_t pixel = (highByte << 8) | lowByte;
if (i < fileSize) {
bg.drawPixel(i % width, i / width, pixel);
} else {
printf("%s Buffer overflow, skipping pixel\n", TAG_S);
break;
}
}
printf("%s Read %zu bytes from file %s\n", TAG_S, bytesRead, path);
file.close();
}