Versión de Firmware con funciones de RAM incorporadas.

Dependencies:   mbed

Fork of VmRecorderV1dot1 by virtualmech

Pantallas/GuardarOtroNombre.cpp

Committer:
JuanManuelAmador
Date:
2015-07-14
Revision:
2:e818c80e6d5c
Parent:
0:3d456b8ce449

File content as of revision 2:e818c80e6d5c:

/**
 * @author Juan Manuel Amador Olivares (virtualmech)
 */
#include "GuardarOtroNombre.h"

extern FechaHora FH;
extern ScreenManager SC;
extern SistemaArchivos SA;
extern MSCFileSystem msc;
extern Teclado keyboard;

extern Mensaje guardadoCorrect;
extern Mensaje guardadoCorrectEN;

extern Mensaje nombreExistente;
extern Mensaje nombreExistenteEN;

GuardarOtroNombre::GuardarOtroNombre(char nextScreen[], char newAdvice[], char newWaitMsg[]):Mensaje(nextScreen, newAdvice){
    nombreAntiguo = NULL;
    strcpy(waitMsg, newWaitMsg);
}

void GuardarOtroNombre::setNombreAntiguo(char *oldName){
    nombreAntiguo = oldName;
}

void GuardarOtroNombre::disableNombreAntiguo(){
    nombreAntiguo = NULL;
}

void GuardarOtroNombre::initialize(DogMLCD* lcd){
    // select font to use:
    lcd->XFont = xfont_11;  
    // Se pinta un mensaje de espera
    lcd->XString(OFFSETX + 8, 23, waitMsg);
    // Se envía a la pantalla física
    lcd->Flush();
    // Se deja la pantalla en blanco para cuando se acabe de cambair de nombre el archivo
    lcd->Clear();
    
    // Se cambia el nombre del archivo del propio USB    
    char oldFile[64];
    char newName[64];
    char aux[64];
    
    // Si el nombreAntiguo vale NULL se toma como nombre antiguo la última fecha y hora guardado    
    if(nombreAntiguo == NULL){
        strcpy(aux, FH.getFechaHora());
        strcpy(oldFile, "/usb/RAW");
        strcat(oldFile, aux);
        strcat(oldFile, ".txt");
    }else{
        strcpy(oldFile, "/usb/");
        strcat(oldFile, nombreAntiguo);
        strcat(oldFile, ".txt");
    }
    
    // Si el archivo no se puede cargar se pasa a la pantalla que avisa que el USB está lleno o desconectado    
    FILE* file;
    file = fopen(oldFile, "r");
    if(file == NULL){
        SC.changeScreen("USBdesconectado");        
    }else{
        // Se cierra el archivo
        fclose(file);
        // El nombre nuevo se toma de el texto introducido con el teclado
        strcpy(aux, keyboard.getNombre());
        // Se comprueba si ya existe un fichero con este nombre
        if(SA.alredyExist(aux)){
            // Se configura la pantalla siguiente según si se está guardan un viaje nuevo con otro nombre o se está cambiando el nombre a uno ya existente
            if(nombreAntiguo != NULL){  // Se debe de volver a la pantalla de opciones del viaje
                nombreExistente.setNextScreen("rOptions");
                nombreExistente.setBackScreen("rOptions");
                nombreExistenteEN.setNextScreen("rOptions");
                nombreExistenteEN.setBackScreen("rOptions");
            }else{                  // Se debe volver a la pantalla de guardado de nuevo viaje
                nombreExistente.setNextScreen("guardaViaje");
                nombreExistente.setBackScreen("guardaViaje");
                nombreExistenteEN.setNextScreen("guardaViaje");
                nombreExistenteEN.setBackScreen("guardaViaje");
            }
            SC.changeScreen("alredyExist");                      
        }else{        
            // Se va a guardar cno otro nombre el archivo asi que
            if(nombreAntiguo != NULL){
                SA.renameRide(nombreAntiguo, aux);            
            }else{  // Se guarda el nuevo nombre del archivo en la lista de nombres de los viajes sólo si nombreAntiguo vale NULL
                strcpy(newName, "/usb/");
                strcat(newName, aux);
                strcat(newName, ".txt");
                SA.file_rename(oldFile, newName);
                strcpy(newName, keyboard.getNombre());
                SA.addElement(newName);
            }
            
            // Se muestra el mensaje de archivo guardado correctamente por pantalla
            Mensaje::initialize(lcd);
        }
    }
}

void GuardarOtroNombre::button5pressed(DogMLCD* lcd){    
    Mensaje::button5pressed(lcd);    
}