avec dfu
Fork of Utils by
Diff: Utils.cpp
- Revision:
- 11:a41267cffa61
- Parent:
- 10:21f3ff5d6a3d
- Child:
- 12:9dd7c462a2c0
--- a/Utils.cpp Sat Feb 24 16:55:04 2018 +0000 +++ b/Utils.cpp Mon Mar 05 11:14:45 2018 +0000 @@ -3,12 +3,14 @@ //SDBlockDevice bd(Flash_MOSI, Flash_MISO, Flash_SCK, Flash_CS); SPIFBlockDevice bd(Flash_MOSI, Flash_MISO, Flash_SCK, Flash_CS); - - + FATFileSystem Root("Root"); int Exist_Val = 0; +//Init des PIN i2c pour l'eeprom +I2C I2C_EEPROM(SDA_PIN, SCL_PIN); + void return_error(int ret_val) { Exist_Val = 0; @@ -44,44 +46,43 @@ printf("Flash erase size : %llu\r\n", bd.get_erase_size()); } -void UTILS::Get_File_Size(char* File_Name) { - +void UTILS::Get_File_Size(char* File_Name) +{ + char filename[20]; sprintf(filename, "/Root/%s", File_Name); FILE* fd = fopen(filename, "r"); - errno_error(fd); - + errno_error(fd); + fseek(fd, 0, SEEK_END); int size = ftell(fd); fseek(fd, 0, SEEK_SET); - + fclose(fd); - + printf("\r\n"); printf(" Taille du fichier %s = %d Kb\r\n", filename, size / 1024); } /* void UTILS::Get_File_Infos(char* File_Name) { - + char filename[20]; sprintf(filename, "/Root/%s", File_Name); - + struct stat fileStat; - stat(filename, &fileStat); - + stat(filename, &fileStat); + printf("Informations sur %s\r\n\r\n",filename); printf(" Taille du fichier : %d bytes\r\n",&fileStat.st_size); printf(" Heure dernier accès : %s\r\n",ctime(&fileStat.st_atime)); printf(" Heure dernière modification : %s\r\n",ctime(&fileStat.st_mtime)); printf(" Heure dernier changement : %s\r\n",ctime(&fileStat.st_ctime)); - struct stat stat_buf; stat(filename, &stat_buf); - stat_buf.st_size; stat_buf.st_dev; @@ -103,23 +104,23 @@ printf(" Heure dernière modification : %s\r\n",ctime(&stat_buf.st_mtime)); printf(" Heure dernier changement : %s\r\n",ctime(&stat_buf.st_ctime)); -} +} void UTILS::Get_File_Infos_bis(char* File_Name) { - + char filename[20]; sprintf(filename, "/Root/%s", File_Name); - + struct stat fileStat; - - stat(filename, &fileStat); + + stat(filename, &fileStat); printf("Information for %s\n",filename); printf("---------------------------\n"); printf("File Size: \t\t%d bytes\n",fileStat.st_size); printf("Number of Links: \t%d\n",fileStat.st_nlink); printf("File inode: \t\t%d\n",fileStat.st_ino); - + printf("File Permissions: \t"); printf( (fileStat.st_mode & S_IRUSR) ? "r" : "-"); printf( (fileStat.st_mode & S_IWUSR) ? "w" : "-"); @@ -131,7 +132,7 @@ printf( (fileStat.st_mode & S_IWOTH) ? "w" : "-"); printf( (fileStat.st_mode & S_IXOTH) ? "x" : "-"); printf("\n\n"); - + } */ @@ -208,14 +209,14 @@ //printf(" Contenu du fichier :\r\n\r\n"); char buff[100] = {0}; - - while (!feof(fd)) { + + while (!feof(fd)) { int size = fread(&buff[0], 1, 15, fd); - fwrite(&buff[0], 1, size, stdout); + fwrite(&buff[0], 1, size, stdout); } //printf("\r\n Fin du fichier.\r\n"); fclose(fd); - + } */ @@ -225,7 +226,7 @@ sprintf(filename, "/Root/%s", File_Name); FILE* fd = fopen(filename, "r"); - errno_error(fd); + errno_error(fd); char s1[100]; printf("\r\n"); printf(" Contenu du fichier :\r\n\r\n"); @@ -235,8 +236,8 @@ printf("%s", s1); fflush(stdout); } - fclose(fd); - printf("\r\n Fin du fichier.\r\n"); + fclose(fd); + printf("\r\n Fin du fichier.\r\n"); } bool UTILS::File_Exist(string File_Name) @@ -275,14 +276,16 @@ DEBUG("Nettoyage de la Flash.\r\n"); float Saved_O2 = UTILS::Read_A_Val("Calibration_O2"); int Saved_Motor = (int)UTILS::Read_A_Val("Servo_Poumon"); + int ARNSRS_ID = (int)UTILS::Read_A_Val("ARNSRS_ID"); UTILS::UnMount_Flash(); UTILS::Format_Flash(); UTILS::Mount_Flash(); UTILS::Store_A_Val(Saved_O2, "Calibration_O2"); UTILS::Store_A_Val(Saved_Motor, "Servo_Poumon"); + UTILS::Store_A_Val(ARNSRS_ID, "ARNSRS_ID"); DEBUG("Flash nettoyée.\r\n"); DEBUG("Redémmarage code.\r\n"); - NVIC_SystemReset(); + NVIC_SystemReset(); } void UTILS::Rename_Flash_File(char* Old_File_Name, char* New_File_Name) @@ -406,21 +409,130 @@ printf(" get X = récupérer le contenu du fichier LOG_X.\n\r"); printf(" file_s X = récupérer la taille du fichier LOG_X.\n\r\n\r"); //printf(" file_i X = récupérer les informations sur le fichier LOG_X.\n\r\n\r"); - printf(" COMMANDES MOTEURS\r\n\r\n"); + printf(" COMMANDES MOTEURS\r\n\r\n"); printf(" c_pou X = changement consigne volet poumon à X.\n\r"); printf(" c_fui X = changement consigne volet fuite à X.\n\r"); printf(" calib_p = calibration à 0 du volet poumon.\n\r"); - printf(" calib_f = calibration à 0 du volet fuite.\n\r"); + printf(" calib_f = calibration à 0 du volet fuite.\n\r"); printf(" secu = mise des volets en mode sécu.\n\r\n\r"); - printf(" COMMANDES CAPTEURS\r\n\r\n"); + printf(" COMMANDES CAPTEURS\r\n\r\n"); + printf(" Head_ID X = Numérote le numéro X d'identification de la sensor Head dans l'eeprom.\n\r"); + printf(" O2_1_ID X = Numérote le numéro X d'identification de la cellule O2 1 dans l'eeprom.\n\r"); + printf(" O2_2_ID X = Numérote le numéro X d'identification de la cellule O2 2 dans l'eeprom.\n\r"); + printf(" CO2_ID X = Numérote le numéro X d'identification du capteur CO2 dans l'eeprom.\n\r"); printf(" calib_O2 X = calibration des cellules O2 dans l'air avec X itérations.\n\r"); - printf(" check = sortie des valeurs de calibrations enregistrées.\n\r\n\r"); + printf(" check = sortie des valeurs de calibrations enregistrées.\n\r\n\r"); printf(" Les commandes pour le Mini-r sont à entrer conformément à la doc. Les plus utilisée :\n\r"); printf(" G = calibration du capteur CO2 dans l'air.\n\r"); - printf(" K 0 = arrêt du capteur CO2.\n\r"); + printf(" K 0 = arrêt du capteur CO2.\n\r"); printf(" K 1 = capteur CO2 mode streaming.\n\r"); printf(" K 2 = capteur CO2 mode spooling.\n\r"); - printf(" A X = digi filter X. X égal à 32, 64, 128...\n\r"); + printf(" A X = digi filter X. X égal à 32, 64, 128...\n\r"); printf("\r\n\r\n"); fflush(stdout); -} \ No newline at end of file +} + +void UTILS::clean_line_EEPROM(unsigned int eeaddress, int address) +{ + DEBUG(" Effacage de la ligne à l'adresse %d de l'eeprom.\r\n", eeaddress); + + int size = 64; + char deleteData[] = {" "}; + + char i2cBuffer[size + 2]; + i2cBuffer[0] = (unsigned char)(eeaddress >> 8); // MSB + i2cBuffer[1] = (unsigned char)(eeaddress & 0xFF); // LSB + + for (int i = 0; i < size; i++) { + i2cBuffer[i + 2] = deleteData[i]; + } + + int result = I2C_EEPROM.write(address, i2cBuffer, size + 2, false); + wait_ms(6); + + DEBUG(" Ligne à l'adresse %d de l'eeprom effacée.\r\n", eeaddress); +} + +//Max 63 bit en écriture +void UTILS::write_EEPROM(char *data, unsigned int eeaddress, int address) +{ + //Nettoyage de la ligne ou on va stocker la nouvelle data + clean_line_EEPROM(eeaddress); + + // On calcul de la taille de la chaine a enregistrer + char size = 0; + do { + size++; + } while (data[size]); + + char i2cBuffer[size + 2]; + i2cBuffer[0] = (unsigned char)(eeaddress >> 8); // MSB + i2cBuffer[1] = (unsigned char)(eeaddress & 0xFF); // LSB + + for (int i = 0; i < size; i++) { + i2cBuffer[i + 2] = data[i]; + } + + int res = I2C_EEPROM.write(address, i2cBuffer, size + 2, false); + + wait_ms(6); + + DEBUG(" Chaine écrite à l'adresse %d de l'eeprom : %s\r\n", eeaddress , data); +} + + +float UTILS::read_F_EEPROM(unsigned int eeaddress ,int address) +{ + //On lit toute la ligne + int size = 64; + char data[64]; + + char i2cBuffer[2]; + i2cBuffer[0] = (unsigned char)(eeaddress >> 8); // MSB + i2cBuffer[1] = (unsigned char)(eeaddress & 0xFF); // LSB + + int result = I2C_EEPROM.write(address, i2cBuffer, 2, false); + wait_ms(6); + + I2C_EEPROM.read(address, data, size); + wait_ms(6); + + float result_F = atof(data); + DEBUG(" Float lu à l'adresse %d de l'eeprom : %f\r\n", eeaddress, result_F); + return result_F; +} + + +int UTILS::read_I_EEPROM(unsigned int eeaddress ,int address) +{ + //On lit toute la ligne + int size = 64; + char data[64]; + + char i2cBuffer[2]; + i2cBuffer[0] = (unsigned char)(eeaddress >> 8); // MSB + i2cBuffer[1] = (unsigned char)(eeaddress & 0xFF); // LSB + + int result = I2C_EEPROM.write(address, i2cBuffer, 2, false); + wait_ms(6); + + I2C_EEPROM.read(address, data, size); + wait_ms(6); + + int result_I = atoi(data); + DEBUG(" Int lu à l'adresse %d l'eeprom : %d\r\n", eeaddress, result_I); + return result_I; +} + +void UTILS::clean_EEPROM(int address) +{ + DEBUG(" Nettoyage total de l'Eeprom (64 colonnes, 4096 lignes).\r\n"); + int i; + int pointer; + char deleteData[] = {" "}; + for (i = 0; i < 4096; i++) { + pointer = 64 * i; + clean_line_EEPROM(pointer, address); + } + DEBUG("Eeprom néttoyée.\r\n"); +}