diff --git a/SD/picofs.c b/SD/picofs.c index 9d7fd4c95ecd5cd173916f33a9f772cda964c9b9..b774cc814093c9e37980ca08e6a403b42f49efbb 100755 --- a/SD/picofs.c +++ b/SD/picofs.c @@ -51,20 +51,6 @@ void writeBlock(SD_info *sd, unsigned int numBlock, int offset, char *source, in } -// void eraseSD(SD_info *sd){ //met des 0 partout dans la carte SD -// char zeros[BLOCK_SIZE]; -// for(int i = 0; i< BLOCK_SIZE-1;i++){ -// zeros[i] = '0'; -// } -// zeros[BLOCK_SIZE-1] = '\0'; -// -// for (int blockNum = 0; blockNum < 5000; blockNum ++){ -// //printf("erase\n"); -// writeBlockSD(sd,blockNum,zeros); -// } -// return; -// } - void LS(SD_info *sd) { char buffer[MAX_FILENAME_LENGTH]; int fileCount = 0; @@ -154,11 +140,7 @@ void RM(SD_info *sd, char *filename) { } for (int blockNum = offset+1; blockNum < offset + 16; blockNum++) { - int startOffset = 0; - if (blockNum == offset) { - startOffset = MAX_FILENAME_LENGTH; - } //for (int chunkStart = startOffset; chunkStart < BLOCK_SIZE/2; chunkStart += CHUNK_SIZE) { // int chunkSize = min(CHUNK_SIZE, BLOCK_SIZE/2 - chunkStart); @@ -291,8 +273,17 @@ void TYPE(SD_info *sd, char *filename, char *data) { writeBlock(sd,blockNum, 0, filename, sizeFilename); placeFound = blockNum; - // Lire les données depuis l'entrée standard et écrire dans le fichier + //chercher où mettre les données du int dataBlockNum = findAvailableBlock(sd); // Premier bloc de données à partir du bloc 1040 + + char dataBlockNumBuffer[CHUNK_SIZE]; + readBlock(sd, dataBlockNum, 0, dataBlockNumBuffer, CHUNK_SIZE); + while (dataBlockNumBuffer[0] != 0) + { + dataBlockNum++; + readBlock(sd, dataBlockNum, 0, dataBlockNumBuffer, CHUNK_SIZE); + } + int blockSizeUsed = 0; // Compteur d'octets dans le bloc actuel char chunkBuffer[CHUNK_SIZE]; @@ -316,7 +307,7 @@ void TYPE(SD_info *sd, char *filename, char *data) { } else { offset = 0; } - + writeBlock(sd,placeFound + index_description_block, offset + index_in_descrBlock*2, blockNumberBuffer, 2); index_in_descrBlock++; @@ -356,7 +347,7 @@ void CAT(SD_info *sd, char *filename) { char filenameBuffer[MAX_FILENAME_LENGTH]; char byteBuffer[CHUNK_SIZE]; char dataBuffer[CHUNK_SIZE]; - int offset; + // Parcours des blocs réservés pour la description des fichiers (superbloc) for (int blockNum = 0; blockNum < MAX_BLOCKS_IN_SUPERBLOCK; blockNum += 16) { @@ -368,29 +359,26 @@ void CAT(SD_info *sd, char *filename) { // Parcours les blocs de description for (int descrBlockNum=1; descrBlockNum<MAX_BLOCKS_PER_FILE_DESCRIPTION; descrBlockNum++) { - if (descrBlockNum==0) { - offset=MAX_FILENAME_LENGTH; - } else { - offset=0; - } - - // Lecture des octets deux par deux - for (int i=0; i<BLOCK_SIZE;i+=2) { - readBlock(sd,descrBlockNum+blockNum, offset+i, byteBuffer, 2); - printf("\nByte buffer: %s\n", byteBuffer); - // Lire les numéros de blocs associés à ce fichier depuis les blocs de description + + // Lecture des octets deux par deux + //for (int i=0; i<BLOCK_SIZE;i+=2) { + readBlock(sd,descrBlockNum+blockNum, 0, byteBuffer, 2); + if (byteBuffer[0] == 0 && byteBuffer[1]== 0) return; + + // printf("\nByte buffer: %s\n", byteBuffer); + // Lire les numéros de blocs associés à ce fichier depuis les blocs de description int dataBlockNum = reconstituteNumber(byteBuffer); // Vérifier si le numéro de bloc est valide (non nul) - if (dataBlockNum == 0) { - return; // Fin du fichier - } + //if (dataBlockNum == 0) { + // return; // Fin du fichier + //} //for (int chunkStart = 0; chunkStart < BLOCK_SIZE; chunkStart += CHUNK_SIZE) { // Lire et afficher le contenu du bloc de données - readBlock(sd,dataBlockNum, 0, dataBuffer, CHUNK_SIZE); - printf("\n%s\n",dataBuffer); + readBlock(sd,dataBlockNum, 0, dataBuffer, CHUNK_SIZE); + printf("\n%s\n",dataBuffer); //} - } + //} } return; // Fichier affiché, sortie de la fonction @@ -508,11 +496,11 @@ int main(int argc, char *argv[]) { printf("taille=%ld\n\n",size); printf("Pico ordinateur OK\n\n"); - // char current_cmd[CMD_SIZE + 1]; // +1 pour le caractère nul + erase(&sd,0,15000); current_cmd[0] = '\0'; // Initialise la chaîne vide printf("PicoOrdi>"); - //eraseSD(&sd); + while (1) { _delay_ms(10);