initial commit
This commit is contained in:
+247
@@ -0,0 +1,247 @@
|
||||
#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();
|
||||
}
|
||||
Reference in New Issue
Block a user