avec dfu

Fork of Utils by POTLESS

Committer:
potless
Date:
Thu May 24 23:16:22 2018 +0000
Revision:
19:2b5bac7f435e
Parent:
18:522e18b47823
avec le flag pour le bootloader et l'id?e de d?clarer l usbserial uniquement si on n'est pas en phase de bootload

Who changed what in which revision?

UserRevisionLine numberNew contents of line
POTLESS_2 0:794c15bd30b0 1 #ifndef CHANGEME_H_
POTLESS_2 0:794c15bd30b0 2 #define CHANGEME_H_
POTLESS_2 18:522e18b47823 3 #include "USBSerial.h"
POTLESS_2 0:794c15bd30b0 4
POTLESS_2 0:794c15bd30b0 5 #include "mbed.h"
POTLESS_2 0:794c15bd30b0 6 #include <string>
POTLESS_2 0:794c15bd30b0 7
POTLESS_2 0:794c15bd30b0 8 #include "FATFileSystem.h"
POTLESS_2 9:fa2818db80cf 9 //#include "SDBlockDevice.h"
POTLESS_2 9:fa2818db80cf 10 #include "SPIFBlockDevice.h"
POTLESS_2 8:23fd400c4edd 11
POTLESS_2 0:794c15bd30b0 12 #include <stdio.h>
POTLESS_2 0:794c15bd30b0 13 #include <errno.h>
POTLESS_2 0:794c15bd30b0 14
POTLESS_2 6:8bae97034114 15 //PIN OUT Flash
POTLESS_2 6:8bae97034114 16 #define Flash_MOSI PA_7
POTLESS_2 6:8bae97034114 17 #define Flash_MISO PA_6
POTLESS_2 6:8bae97034114 18 #define Flash_SCK PA_5
POTLESS_2 6:8bae97034114 19 #define Flash_CS PB_6
POTLESS_2 6:8bae97034114 20
POTLESS_2 11:a41267cffa61 21 //Pin de l'eeprom I2C
POTLESS_2 11:a41267cffa61 22 #define SCL_PIN PB_8
POTLESS_2 11:a41267cffa61 23 #define SDA_PIN PB_9
POTLESS_2 11:a41267cffa61 24
POTLESS_2 11:a41267cffa61 25 //Adresse i2C de l'eeprom
POTLESS_2 11:a41267cffa61 26 #define EEPROM_ADDRESS 0xA0
POTLESS_2 11:a41267cffa61 27
POTLESS_2 16:74cb32bb162f 28 #define DEBUG_MODE 0
POTLESS_2 6:8bae97034114 29
POTLESS_2 10:21f3ff5d6a3d 30 #if DEBUG_MODE
POTLESS_2 10:21f3ff5d6a3d 31 #define DEBUG(...) { printf(__VA_ARGS__); fflush(stdout);}
POTLESS_2 6:8bae97034114 32 #else
POTLESS_2 10:21f3ff5d6a3d 33 #define DEBUG(...)
POTLESS_2 6:8bae97034114 34 #endif
POTLESS_2 0:794c15bd30b0 35
potless 19:2b5bac7f435e 36 #define DEEP_DEBUG_MODE 1
POTLESS_2 12:9dd7c462a2c0 37
POTLESS_2 12:9dd7c462a2c0 38 #if DEEP_DEBUG_MODE
POTLESS_2 12:9dd7c462a2c0 39 #define DEEP_DEBUG(...) { printf(__VA_ARGS__); fflush(stdout);}
POTLESS_2 12:9dd7c462a2c0 40 #else
POTLESS_2 12:9dd7c462a2c0 41 #define DEEP_DEBUG(...)
POTLESS_2 12:9dd7c462a2c0 42 #endif
POTLESS_2 12:9dd7c462a2c0 43
POTLESS_2 0:794c15bd30b0 44 /** Utils class.
POTLESS_2 0:794c15bd30b0 45 * Rassemblant des fonctions annexes pour le fonctionnement de l'ARNSRS.
POTLESS_2 0:794c15bd30b0 46 *
POTLESS_2 0:794c15bd30b0 47 * A besoin des libs suivantes :
POTLESS_2 0:794c15bd30b0 48 *
POTLESS_2 0:794c15bd30b0 49 * - FATFileSystem
POTLESS_2 0:794c15bd30b0 50 *
POTLESS_2 6:8bae97034114 51 * - SPIFBlockDevice
POTLESS_2 0:794c15bd30b0 52 *
POTLESS_2 0:794c15bd30b0 53 *
POTLESS_2 0:794c15bd30b0 54 * Constantes de l'application :
POTLESS_2 0:794c15bd30b0 55 *
POTLESS_2 6:8bae97034114 56 * Pin out Flash :
POTLESS_2 6:8bae97034114 57 *
POTLESS_2 6:8bae97034114 58 * - Flash_MOSI PA_7
POTLESS_2 6:8bae97034114 59 *
POTLESS_2 6:8bae97034114 60 * - Flash_MISO PA_6
POTLESS_2 6:8bae97034114 61 *
POTLESS_2 6:8bae97034114 62 * - Flash_SCK PA_5
POTLESS_2 6:8bae97034114 63 *
POTLESS_2 6:8bae97034114 64 * - Flash_CS PB_6
POTLESS_2 6:8bae97034114 65 *
POTLESS_2 6:8bae97034114 66 * Liste des erreurs possibles sur les fonctions Flash :
POTLESS_2 0:794c15bd30b0 67 *
POTLESS_2 6:8bae97034114 68 *
POTLESS_2 6:8bae97034114 69 * (0) no error
POTLESS_2 11:a41267cffa61 70 *
POTLESS_2 6:8bae97034114 71 * (1) A hard error occurred in the low level disk I/O layer
POTLESS_2 6:8bae97034114 72 *
POTLESS_2 11:a41267cffa61 73 * (2) Assertion failed
POTLESS_2 6:8bae97034114 74 *
POTLESS_2 11:a41267cffa61 75 * (3) The physical drive cannot work
POTLESS_2 6:8bae97034114 76 *
POTLESS_2 6:8bae97034114 77 * (4) Could not find the file
POTLESS_2 6:8bae97034114 78 *
POTLESS_2 6:8bae97034114 79 * (5) Could not find the path
POTLESS_2 0:794c15bd30b0 80 *
POTLESS_2 6:8bae97034114 81 * (6) The path name format is invalid
POTLESS_2 6:8bae97034114 82 *
POTLESS_2 6:8bae97034114 83 * (7) Access denied due to prohibited access or directory full, Permission denied
POTLESS_2 6:8bae97034114 84 *
POTLESS_2 6:8bae97034114 85 * (8) Access denied due to prohibited access, File exists
POTLESS_2 6:8bae97034114 86 *
POTLESS_2 11:a41267cffa61 87 * (9) The file/directory object is invalid, Bad address
POTLESS_2 6:8bae97034114 88 *
POTLESS_2 6:8bae97034114 89 * (10) The physical drive is write protected
POTLESS_2 6:8bae97034114 90 *
POTLESS_2 6:8bae97034114 91 * (11) The logical drive number is invalid
POTLESS_2 6:8bae97034114 92 *
POTLESS_2 6:8bae97034114 93 * (12) The volume has no work area, No such device or address
POTLESS_2 0:794c15bd30b0 94 *
POTLESS_2 6:8bae97034114 95 * (13) There is no valid FAT volume, No such file or directory
POTLESS_2 6:8bae97034114 96 *
POTLESS_2 6:8bae97034114 97 * (14) The f_mkfs() aborted due to any parameter error
POTLESS_2 6:8bae97034114 98 *
POTLESS_2 6:8bae97034114 99 * (15) Could not get a grant to access the volume within defined period, Bad file number
POTLESS_2 0:794c15bd30b0 100 *
POTLESS_2 6:8bae97034114 101 * (16) The operation is rejected according to the file sharing policy, Permission denied
POTLESS_2 6:8bae97034114 102 *
POTLESS_2 6:8bae97034114 103 * (17) LFN working buffer could not be allocated, Not enough space
POTLESS_2 0:794c15bd30b0 104 *
POTLESS_2 6:8bae97034114 105 * (18) Number of open files > _FS_LOCK, Too many open files in system
POTLESS_2 6:8bae97034114 106 *
POTLESS_2 11:a41267cffa61 107 * (19) Given parameter is invalid, Exec format error
POTLESS_2 0:794c15bd30b0 108 */
POTLESS_2 0:794c15bd30b0 109
POTLESS_2 0:794c15bd30b0 110 class UTILS
POTLESS_2 0:794c15bd30b0 111 {
POTLESS_2 0:794c15bd30b0 112
POTLESS_2 0:794c15bd30b0 113 public:
POTLESS_2 0:794c15bd30b0 114
POTLESS_2 0:794c15bd30b0 115 /**Remapper une valeur dans une autre échelle.
POTLESS_2 0:794c15bd30b0 116 * @param float Valeur à remapper
POTLESS_2 0:794c15bd30b0 117 * @param float Minimum de l'échelle de la valeur
POTLESS_2 0:794c15bd30b0 118 * @param float Maximum de l'échelle de la valeur
POTLESS_2 0:794c15bd30b0 119 * @param float Minimum de la nouvelle échelle
POTLESS_2 0:794c15bd30b0 120 * @param float Maximum de de la nouvelle échelle
POTLESS_2 0:794c15bd30b0 121 */
POTLESS_2 0:794c15bd30b0 122 static float Remap(float x, float in_min, float in_max, float out_min, float out_max);
POTLESS_2 0:794c15bd30b0 123
POTLESS_2 0:794c15bd30b0 124 /**Contraint une valeur entre deux limites.
POTLESS_2 0:794c15bd30b0 125 * @param float Valeur à contraindre
POTLESS_2 0:794c15bd30b0 126 * @param float Minimum de la valeur
POTLESS_2 0:794c15bd30b0 127 * @param float Maximum de la valeur
POTLESS_2 0:794c15bd30b0 128 */
POTLESS_2 0:794c15bd30b0 129 static float constrain(float x, float a, float b);
POTLESS_2 0:794c15bd30b0 130
POTLESS_2 8:23fd400c4edd 131 /**Fonction d'affichage des infos de la Flash.
POTLESS_2 15:a8c19ad9c11d 132 * @param Serial Port série ou sortir le résultat
POTLESS_2 8:23fd400c4edd 133 */
POTLESS_2 18:522e18b47823 134 static void Flash_Infos(USBSerial *serial_port = NULL);
POTLESS_2 11:a41267cffa61 135
POTLESS_2 6:8bae97034114 136 /**Fonction de stockage valeur sur la Flash.
POTLESS_2 0:794c15bd30b0 137 * @param float Val_To_Store, la valeur à stocker
POTLESS_2 0:794c15bd30b0 138 * @param char* Nom du fichier ou stocker cette valeur
POTLESS_2 0:794c15bd30b0 139 */
POTLESS_2 0:794c15bd30b0 140 static void Store_A_Val(float Val_To_Store, char* File_Name);
POTLESS_2 0:794c15bd30b0 141
POTLESS_2 6:8bae97034114 142 /**Fonction de récupération d'une valeur stockée sur la Flash.
POTLESS_2 0:794c15bd30b0 143 * @param char* Nom du fichier ou stocker cette valeur
POTLESS_2 0:794c15bd30b0 144 * @returns
POTLESS_2 0:794c15bd30b0 145 * valeur de calibration des capteurs O2
POTLESS_2 0:794c15bd30b0 146 */
POTLESS_2 0:794c15bd30b0 147 static float Read_A_Val(char* File_Name);
POTLESS_2 0:794c15bd30b0 148
POTLESS_2 6:8bae97034114 149 /**Fonction d'enregistrement d'une chaine de charatères sur la Flash.
POTLESS_2 0:794c15bd30b0 150 * @param char* To_Store, chaine de charactères
POTLESS_2 0:794c15bd30b0 151 * @param char* Nom du fichier, s'il existe il est ouvert, sinon il est créé
POTLESS_2 0:794c15bd30b0 152 */
POTLESS_2 6:8bae97034114 153 static void Write_Flash_File(char* To_Store, char* File_Name);
POTLESS_2 0:794c15bd30b0 154
POTLESS_2 6:8bae97034114 155 /**Fonction de lecture d'un fichier sur la Flash.
POTLESS_2 15:a8c19ad9c11d 156 * @param Serial Port série ou sortir le résultat
POTLESS_2 0:794c15bd30b0 157 * @param char* Nom du fichier
POTLESS_2 0:794c15bd30b0 158 */
POTLESS_2 18:522e18b47823 159 static void Read_Flash_File(USBSerial *serial_port, char* File_Name);
POTLESS_2 15:a8c19ad9c11d 160
POTLESS_2 8:23fd400c4edd 161 /**Fonction de renvoie de la taille d'un fichier.
POTLESS_2 15:a8c19ad9c11d 162 * @param Serial Port série ou sortir le résultat
POTLESS_2 8:23fd400c4edd 163 * @param char* Nom du fichier
POTLESS_2 8:23fd400c4edd 164 */
POTLESS_2 18:522e18b47823 165 static void Get_File_Size(USBSerial *serial_port, char* File_Name);
POTLESS_2 11:a41267cffa61 166
POTLESS_2 6:8bae97034114 167 /**Fonction d'éffaçage d'un fichier sur la Flash.
POTLESS_2 8:23fd400c4edd 168 * @param char* Nom du fichier à effacer
POTLESS_2 0:794c15bd30b0 169 */
POTLESS_2 6:8bae97034114 170 static void Delete_Flash_File(char* File_Name);
POTLESS_2 0:794c15bd30b0 171
POTLESS_2 6:8bae97034114 172 /**Fonction nettoyage de la Flash.
POTLESS_2 6:8bae97034114 173 */
POTLESS_2 6:8bae97034114 174 static void Clean_Flash();
POTLESS_2 11:a41267cffa61 175
POTLESS_2 15:a8c19ad9c11d 176 /**Fonction nettoyage de la Flash.
POTLESS_2 15:a8c19ad9c11d 177 */
POTLESS_2 15:a8c19ad9c11d 178 static void Clean_Flash_All();
POTLESS_2 15:a8c19ad9c11d 179
POTLESS_2 6:8bae97034114 180 /**Fonction d'éffaçage d'un fichier sur la Flash.
POTLESS_2 0:794c15bd30b0 181 * @param char* Nom du fichier à effacer
POTLESS_2 0:794c15bd30b0 182 * @param char* Nouveau Nom du fichier
POTLESS_2 0:794c15bd30b0 183 */
POTLESS_2 6:8bae97034114 184 static void Rename_Flash_File(char* Old_File_Name, char* New_File_Name);
POTLESS_2 0:794c15bd30b0 185
POTLESS_2 6:8bae97034114 186 /**Fonction montage de la Flash.
POTLESS_2 0:794c15bd30b0 187 */
POTLESS_2 6:8bae97034114 188 static void Mount_Flash();
POTLESS_2 0:794c15bd30b0 189
POTLESS_2 6:8bae97034114 190 /**Fonction demontage de la Flash.
POTLESS_2 0:794c15bd30b0 191 */
POTLESS_2 6:8bae97034114 192 static void UnMount_Flash();
POTLESS_2 0:794c15bd30b0 193
POTLESS_2 6:8bae97034114 194 /**Fonction formatage de la Flash.
POTLESS_2 0:794c15bd30b0 195 */
POTLESS_2 6:8bae97034114 196 static void Format_Flash();
POTLESS_2 11:a41267cffa61 197
POTLESS_2 2:5af7a1fb1903 198 /**Fonction DIR.
POTLESS_2 15:a8c19ad9c11d 199 * @param Serial Port série ou sortir le résultat
POTLESS_2 2:5af7a1fb1903 200 * @param char* Nom du répertoire
POTLESS_2 2:5af7a1fb1903 201 */
POTLESS_2 18:522e18b47823 202 static void Dir_Flash(USBSerial *serial_port = NULL, char* Dir_Name = "");
POTLESS_2 15:a8c19ad9c11d 203
POTLESS_2 3:01677db45b2a 204 /**Fonction de numérotage des fichiers log.
POTLESS_2 3:01677db45b2a 205 * @returns
POTLESS_2 3:01677db45b2a 206 * Index du nouveau fichier log
POTLESS_2 3:01677db45b2a 207 */
POTLESS_2 3:01677db45b2a 208 static int File_Index();
POTLESS_2 11:a41267cffa61 209
POTLESS_2 3:01677db45b2a 210 /**Fonction de test si un fichier existe.
POTLESS_2 3:01677db45b2a 211 * @param char* Nom du fichier
POTLESS_2 3:01677db45b2a 212 * @returns
POTLESS_2 3:01677db45b2a 213 * true si le fichier existe, false s'il n'existe pas
POTLESS_2 3:01677db45b2a 214 */
POTLESS_2 15:a8c19ad9c11d 215 static bool File_Exist(char* File_Name);
POTLESS_2 11:a41267cffa61 216
POTLESS_2 6:8bae97034114 217 /**Fonction d'affichage du menu d'aide.
POTLESS_2 15:a8c19ad9c11d 218 * @param Serial Port série ou sortir le résultat
POTLESS_2 6:8bae97034114 219 */
POTLESS_2 18:522e18b47823 220 static void Help(USBSerial *serial_port = NULL);
POTLESS_2 3:01677db45b2a 221
POTLESS_2 11:a41267cffa61 222 /**Fonction d'écriture sur l'eeprom.
POTLESS_2 11:a41267cffa61 223 * @param char data à stocker
POTLESS_2 11:a41267cffa61 224 * @param int eeadress de stockage de la data dans l'eeprom
POTLESS_2 11:a41267cffa61 225 * @param int adress adresse I2C de l'eeprom
POTLESS_2 11:a41267cffa61 226 */
POTLESS_2 11:a41267cffa61 227 static void write_EEPROM(char *data, unsigned int eeaddress, int address = EEPROM_ADDRESS);
POTLESS_2 11:a41267cffa61 228
POTLESS_2 11:a41267cffa61 229 /**Fonction de lecture d'un int dans l'eeprom.
POTLESS_2 11:a41267cffa61 230 * @param int eeadress de stockage de la data dans l'eeprom
POTLESS_2 11:a41267cffa61 231 * @param int adress adresse I2C de l'eeprom
POTLESS_2 11:a41267cffa61 232 * @returns
POTLESS_2 11:a41267cffa61 233 * valeur int stockée à cette adresse
POTLESS_2 11:a41267cffa61 234 */
POTLESS_2 11:a41267cffa61 235 static int read_I_EEPROM(unsigned int eeaddress, int address = EEPROM_ADDRESS);
POTLESS_2 11:a41267cffa61 236
POTLESS_2 11:a41267cffa61 237 /**Fonction de lecture d'un float dans l'eeprom.
POTLESS_2 11:a41267cffa61 238 * @param int eeadress de stockage de la data dans l'eeprom
POTLESS_2 11:a41267cffa61 239 * @param int adress adresse I2C de l'eeprom
POTLESS_2 11:a41267cffa61 240 * @returns
POTLESS_2 11:a41267cffa61 241 * valeur float stockée à cette adresse
POTLESS_2 11:a41267cffa61 242 */
POTLESS_2 11:a41267cffa61 243 static float read_F_EEPROM(unsigned int eeaddress, int address = EEPROM_ADDRESS);
POTLESS_2 11:a41267cffa61 244
POTLESS_2 12:9dd7c462a2c0 245 /**Fonction de lecture d'un char dans l'eeprom.
POTLESS_2 15:a8c19ad9c11d 246 * @param char data ou va être stocké le résultat
POTLESS_2 12:9dd7c462a2c0 247 * @param int eeadress de stockage de la data dans l'eeprom
POTLESS_2 12:9dd7c462a2c0 248 * @param int adress adresse I2C de l'eeprom
POTLESS_2 12:9dd7c462a2c0 249 * @returns
POTLESS_2 12:9dd7c462a2c0 250 * char stockée à cette adresse
POTLESS_2 12:9dd7c462a2c0 251 */
POTLESS_2 12:9dd7c462a2c0 252 static void read_C_EEPROM(char *data, unsigned int eeaddress , int address = EEPROM_ADDRESS);
POTLESS_2 12:9dd7c462a2c0 253
POTLESS_2 12:9dd7c462a2c0 254 /**Fonction de lecture d'un char dans l'eeprom.
POTLESS_2 12:9dd7c462a2c0 255 * @param int eeadress de stockage de la data dans l'eeprom
POTLESS_2 12:9dd7c462a2c0 256 * @param int adress adresse I2C de l'eeprom
POTLESS_2 12:9dd7c462a2c0 257 * @returns
POTLESS_2 12:9dd7c462a2c0 258 * char stockée à cette adresse
POTLESS_2 12:9dd7c462a2c0 259 */
POTLESS_2 12:9dd7c462a2c0 260 static char* read_EEPROM(unsigned int eeaddress , int address = EEPROM_ADDRESS);
POTLESS_2 12:9dd7c462a2c0 261
POTLESS_2 11:a41267cffa61 262 /**Fonction de nettoyage d'une ligne de l'eeprom.
POTLESS_2 11:a41267cffa61 263 * @param int eeadress de la ligne a effacer
POTLESS_2 11:a41267cffa61 264 * @param int adress adresse I2C de l'eeprom
POTLESS_2 11:a41267cffa61 265 */
POTLESS_2 11:a41267cffa61 266 static void clean_line_EEPROM(unsigned int eeaddress, int address = EEPROM_ADDRESS);
POTLESS_2 11:a41267cffa61 267
POTLESS_2 11:a41267cffa61 268 /**Fonction de nettoyage l'eeprom.
POTLESS_2 11:a41267cffa61 269 * @param int adress adresse I2C de l'eeprom
POTLESS_2 11:a41267cffa61 270 */
POTLESS_2 11:a41267cffa61 271 static void clean_EEPROM(int address = EEPROM_ADDRESS);
POTLESS_2 15:a8c19ad9c11d 272
potless 19:2b5bac7f435e 273 /**Fonction pour mise à jour firmware par USB.
potless 19:2b5bac7f435e 274 * @param
potless 19:2b5bac7f435e 275 * @returns
potless 19:2b5bac7f435e 276 *
potless 19:2b5bac7f435e 277 */
potless 19:2b5bac7f435e 278 static void DFU();
potless 19:2b5bac7f435e 279
POTLESS_2 0:794c15bd30b0 280 private:
POTLESS_2 0:794c15bd30b0 281 //Rien...
POTLESS_2 0:794c15bd30b0 282 };
POTLESS_2 0:794c15bd30b0 283 #endif