247 lines
7.3 KiB
C++
247 lines
7.3 KiB
C++
#include "FileManager.h"
|
|
#include "ChronoReadingManager.h"
|
|
|
|
const char* _gunProfileFolder="/gunprofile/";
|
|
const char* _projectileProfileFolder="/projectileprofile/";
|
|
const int maxProfileCount=128;
|
|
FileManager::FileManager() {
|
|
}
|
|
FileManager& FileManager::getInstance(){
|
|
static FileManager instance;
|
|
return instance;
|
|
}
|
|
void FileManager::init(){
|
|
if (!LittleFS.begin(true)) { // true to format if not formatted
|
|
Serial.println("LittleFS Mount Failed");
|
|
return;
|
|
}
|
|
}
|
|
void FileManager::saveGunProfile(GunProfile& profile){
|
|
String filename=_gunProfileFolder;
|
|
filename += String(millis());
|
|
Serial.print("filename: ");
|
|
Serial.println(filename);
|
|
File file = LittleFS.open(filename, FILE_WRITE);
|
|
if (!file) {
|
|
Serial.println("Failed to open gun profile file for writing");
|
|
return;
|
|
}
|
|
|
|
// Write the object's data directly as bytes
|
|
file.write((uint8_t*)&profile, sizeof(GunProfile));
|
|
file.close();
|
|
Serial.println("GunProfile Object written to file successfully.");
|
|
}
|
|
void FileManager::removeGunProfile(GunProfile& profile){
|
|
File directory = LittleFS.open(_gunProfileFolder, FILE_READ);
|
|
if (!directory){
|
|
Serial.println("failed to open gun profile folder....");
|
|
if (!directory.isDirectory()) {
|
|
return;
|
|
}
|
|
}
|
|
if (!directory.isDirectory()) {
|
|
Serial.println(" - not a directory, error");
|
|
return;
|
|
}
|
|
directory.rewindDirectory();
|
|
|
|
ChronoReadingManager& chronoReadings = ChronoReadingManager::getInstance();
|
|
Serial.println("parsing gun profile directory....");
|
|
File file = directory.openNextFile();
|
|
String fs="";
|
|
bool found=false;
|
|
GunProfile gunProfile;
|
|
while (file) {
|
|
fs=_gunProfileFolder;
|
|
fs += file.name();
|
|
|
|
file.read((byte *)&gunProfile, sizeof(gunProfile));
|
|
file.close();
|
|
|
|
if (gunProfile.getName()==profile.getName() &&
|
|
gunProfile.getPowerLevel()==profile.getPowerLevel()){
|
|
Serial.print("removing: ");
|
|
Serial.println(fs);
|
|
LittleFS.remove(fs);
|
|
break;
|
|
}
|
|
|
|
|
|
file = directory.openNextFile();
|
|
if (file.size()==0){break;}
|
|
}
|
|
directory.close();
|
|
Serial.println("done removing gun profile!");
|
|
}
|
|
void FileManager::removeAllGunProfiles(){
|
|
File directory = LittleFS.open(_gunProfileFolder, FILE_READ);
|
|
if (!directory){
|
|
Serial.println("failed to open gun profile folder....");
|
|
if (!directory.isDirectory()) {
|
|
return;
|
|
}
|
|
}
|
|
if (!directory.isDirectory()) {
|
|
Serial.println(" - not a directory, error");
|
|
return;
|
|
}
|
|
directory.rewindDirectory();
|
|
|
|
Serial.println("parsing gun profile directory....");
|
|
File file = directory.openNextFile();
|
|
const char* fs;
|
|
while (file) {
|
|
fs=file.path();
|
|
file.close();
|
|
file = directory.openNextFile();
|
|
Serial.print("removing: ");
|
|
Serial.print(fs);
|
|
bool rm=LittleFS.remove(fs);
|
|
Serial.print(" ---> ");
|
|
Serial.println(rm);
|
|
}
|
|
directory.close();
|
|
Serial.println("done removing all gun profiles!");
|
|
}
|
|
void FileManager::loadGunProfiles(LinkedList<GunProfile>& profiles){
|
|
//File file = LittleFS.open(filename, FILE_READ);
|
|
File directory = LittleFS.open(_gunProfileFolder, FILE_READ);
|
|
if (!directory){
|
|
Serial.println("failed to open gun profile folder....");
|
|
if (!directory.isDirectory()) {
|
|
Serial.println(" - not a directory, generating directory for first time");
|
|
LittleFS.mkdir(_gunProfileFolder);
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (!directory.isDirectory()) {
|
|
Serial.println(" - not a directory, error");
|
|
return;
|
|
}
|
|
directory.rewindDirectory();
|
|
|
|
ChronoReadingManager& chronoReadings = ChronoReadingManager::getInstance();
|
|
Serial.println("parsing gun profile directory....");
|
|
File file = directory.openNextFile();
|
|
GunProfile gunProfile;
|
|
while (file) {
|
|
String fs=_gunProfileFolder;
|
|
fs += file.name();
|
|
file.read((byte *)&gunProfile, sizeof(gunProfile));
|
|
chronoReadings.addGunProfile(gunProfile, false);
|
|
Serial.print("added gun profile: ");
|
|
Serial.println(file.name());
|
|
|
|
Serial.print("Free Heap Memory: ");
|
|
Serial.print(ESP.getFreeHeap());
|
|
Serial.println(" bytes");
|
|
|
|
file.close();
|
|
file = directory.openNextFile();
|
|
if (file.size()==0){break;}
|
|
}
|
|
|
|
directory.close();
|
|
Serial.println("done loading gun profiles!");
|
|
}
|
|
void FileManager::saveProjectileProfile(ProjectileProfile& profile){
|
|
String filename=_projectileProfileFolder;
|
|
filename += String(millis());
|
|
File file = LittleFS.open(filename, FILE_WRITE);
|
|
if (!file) {
|
|
Serial.println("Failed to open projectile profile file for writing");
|
|
return;
|
|
}
|
|
|
|
// Write the object's data directly as bytes
|
|
file.write((uint8_t*)&profile, sizeof(ProjectileProfile));
|
|
file.close();
|
|
Serial.println("ProjectileProfile Object written to file successfully.");
|
|
}
|
|
void FileManager::removeProjectileProfile(ProjectileProfile& profile){
|
|
File directory = LittleFS.open(_projectileProfileFolder, FILE_READ);
|
|
if (!directory){
|
|
Serial.println("failed to open projectile profile folder....");
|
|
if (!directory.isDirectory()) {
|
|
return;
|
|
}
|
|
}
|
|
if (!directory.isDirectory()) {
|
|
Serial.println(" - not a directory, error");
|
|
return;
|
|
}
|
|
directory.rewindDirectory();
|
|
|
|
ChronoReadingManager& chronoReadings = ChronoReadingManager::getInstance();
|
|
Serial.println("parsing projectile profile directory....");
|
|
File file = directory.openNextFile();
|
|
String fs="";
|
|
bool found=false;
|
|
while (file) {
|
|
fs=_projectileProfileFolder;
|
|
fs += file.name();
|
|
|
|
ProjectileProfile projectileProfile;
|
|
file.read((byte *)&projectileProfile, sizeof(projectileProfile));
|
|
file.close();
|
|
|
|
if (projectileProfile.getName()==profile.getName() &&
|
|
projectileProfile.getCaliber()==profile.getCaliber() &&
|
|
projectileProfile.getWeight()==profile.getWeight() &&
|
|
projectileProfile.getType()==profile.getType()){
|
|
Serial.print("removing: ");
|
|
Serial.println(fs);
|
|
LittleFS.remove(fs);
|
|
break;
|
|
}
|
|
|
|
|
|
file = directory.openNextFile();
|
|
if (file.size()==0){break;}
|
|
}
|
|
directory.close();
|
|
Serial.println("done removing projectile profile!");
|
|
}
|
|
void FileManager::loadProjectileProfiles(LinkedList<ProjectileProfile>& profiles){
|
|
//File file = LittleFS.open(filename, FILE_READ);
|
|
File directory = LittleFS.open(_projectileProfileFolder, FILE_READ);
|
|
if (!directory){
|
|
Serial.println("failed to open projectile profile folder....");
|
|
if (!directory.isDirectory()) {
|
|
Serial.println(" - not a directory, generating directory for first time");
|
|
LittleFS.mkdir(_projectileProfileFolder);
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (!directory.isDirectory()) {
|
|
Serial.println(" - not a directory, error");
|
|
return;
|
|
}
|
|
directory.rewindDirectory();
|
|
|
|
ChronoReadingManager& chronoReadings = ChronoReadingManager::getInstance();
|
|
Serial.println("parsing projectile profile directory....");
|
|
File file = directory.openNextFile();
|
|
while (file) {
|
|
String fs=_projectileProfileFolder;
|
|
fs += file.name();
|
|
ProjectileProfile projectileProfile;
|
|
file.read((byte *)&projectileProfile, sizeof(projectileProfile));
|
|
chronoReadings.addProjectileProfile(projectileProfile, false);
|
|
Serial.print("added projectile profile: ");
|
|
Serial.println(file.name());
|
|
|
|
file.close();
|
|
file = directory.openNextFile();
|
|
if (file.size()==0){break;}
|
|
}
|
|
|
|
directory.close();
|
|
Serial.println("done loading projectile profiles!");
|
|
}
|
|
void FileManager::formatDisk(){
|
|
LittleFS.format();
|
|
} |