Skip to content
Snippets Groups Projects
Commit 9cbc6286 authored by pifou's avatar pifou
Browse files

RM corrigé, TYPE buggé pour fichier

parent f827e94f
No related branches found
No related tags found
No related merge requests found
......@@ -32,7 +32,7 @@ void readBlock(SD_info *sd, unsigned int numBlock, int offset, char *storage, in
void writeBlock(SD_info *sd, unsigned int numBlock, int offset, char *source, int size) {
char buffer_write[BLOCK_SIZE/2];
char buffer_write[BLOCK_SIZE];
readData(sd, numBlock, 0, size, (uint8_t *)buffer_write);
if(offset + size > 512 )
{
......@@ -51,11 +51,25 @@ 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;
printf("\n");
// Parcourir les blocs multiples de 16 à partir de 0 jusqu'à MAX_BLOCKS_IN_SUPERBLOCK
// // Parcourir les blocs multiples de 16 à partir de 0 jusqu'à MAX_BLOCKS_IN_SUPERBLOCK
for (int blockNum = 0; blockNum < MAX_BLOCKS_IN_SUPERBLOCK; blockNum += 16) {
readBlock(sd,blockNum, 0, buffer, MAX_FILENAME_LENGTH);
......@@ -66,7 +80,6 @@ void LS(SD_info *sd) {
fileCount++;
}
}
if (fileCount == 0) {
printf("\nAucun fichier trouvé.\n");
}
......@@ -105,10 +118,18 @@ int min(int a, int b) {
return a < b ? a : b;
}
// Fonction qui reconstitue le numéro de bloc à partir du tableau
int reconstituteNumber(char blockNumberBuffer[2]) {
char octet1 = blockNumberBuffer[0];
char octet2 = blockNumberBuffer[1];
int dataBlockNum = (octet1 << 8) | octet2;
return dataBlockNum;
}
void RM(SD_info *sd, char *filename) {
int fileFound = -1;
int offset;
char fileBuffer[BLOCK_SIZE];
char fileBuffer[CHUNK_SIZE];
// Parcourir les blocs réservés pour la description des fichiers (superbloc)
for (int blockNum = 0; blockNum < MAX_BLOCKS_IN_SUPERBLOCK; blockNum += 16) {
......@@ -139,25 +160,26 @@ void RM(SD_info *sd, char *filename) {
startOffset = MAX_FILENAME_LENGTH;
}
for (int chunkStart = startOffset; chunkStart < BLOCK_SIZE/2; chunkStart += CHUNK_SIZE) {
int chunkSize = min(CHUNK_SIZE, BLOCK_SIZE/2 - chunkStart);
readBlock(sd,blockNum, chunkStart, fileBuffer, chunkSize);
for (int i = 0; i < chunkSize; i += 2) {
int blockNumData = (fileBuffer[i] << 8) | fileBuffer[i + 1];
//for (int chunkStart = startOffset; chunkStart < BLOCK_SIZE/2; chunkStart += CHUNK_SIZE) {
// int chunkSize = min(CHUNK_SIZE, BLOCK_SIZE/2 - chunkStart);
int chunkSize = 0;
int chunkStart = 0;
readBlock(sd,blockNum, 0, fileBuffer, chunkSize);
//for (int i = 0; i < chunkSize; i += 2) {
// int blockNumData = (fileBuffer[i] << 8) | fileBuffer[i + 1];
int blockNumData = reconstituteNumber(fileBuffer);
if (blockNumData == 0) {
writeBlock(sd,blockNum, chunkStart, fileBuffer, chunkSize);
printf("\nLe fichier \"%s\" a été supprimé avec succès.\n", filename);
return; // Sortir des boucles
}
setBlockAvailability(sd,blockNumData, 0); // Marquer le bloc comme disponible
fileBuffer[i] = 0;
fileBuffer[i + 1] = 0;
}
else setBlockAvailability(sd,blockNumData, 0); // Marquer le bloc comme disponible
//fileBuffer[i] = 0;
//fileBuffer[i + 1] = 0;
//}
writeBlock(sd,blockNum, chunkStart, fileBuffer, chunkSize);
}
//}
}
printf("\nLe fichier \"%s\" a été supprimé avec succès.\n", filename);
......@@ -171,7 +193,7 @@ void MV(SD_info *sd, char *old_filename, char *new_filename) {
int fileFound = 0;
// Parcourir les blocs réservés pour la description des fichiers (superbloc)
for (int blockNum = 0; blockNum < MAX_BLOCKS_IN_SUPERBLOCK; blockNum += 16) {
for (int blockNum = 0; blockNum < MAX_BLOCKS_IN_SUPERBLOCK; blockNum += 1) {
readBlock(sd,blockNum, 0, filenameBuffer, MAX_FILENAME_LENGTH);
......@@ -189,6 +211,7 @@ void MV(SD_info *sd, char *old_filename, char *new_filename) {
break; // Nom modifié, sortir de la boucle
}
}
if (fileFound == 1) {
printf("\nLe nom du fichier \"%s\" a été renommé avec succès.\n", old_filename);
......@@ -232,13 +255,7 @@ int findAvailableBlock(SD_info *sd) {
return -1;
}
// Fonction qui reconstitue le numéro de bloc à partir du tableau
int reconsituteNumber(char blockNumberBuffer[2]) {
char octet1 = blockNumberBuffer[0];
char octet2 = blockNumberBuffer[1];
int dataBlockNum = (octet1 << 8) | octet2;
return dataBlockNum;
}
// Fonction qui réparti un numéro de bloc sur deux octets
......@@ -321,7 +338,6 @@ void TYPE(SD_info *sd, char *filename, char *data) {
return;
}
break; // Fichier créé, sortir de la boucle
}
}
......@@ -361,9 +377,9 @@ void CAT(SD_info *sd, char *filename) {
// 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
int dataBlockNum = reconsituteNumber(byteBuffer);
int dataBlockNum = reconstituteNumber(byteBuffer);
// Vérifier si le numéro de bloc est valide (non nul)
if (dataBlockNum == 0) {
return; // Fin du fichier
......@@ -445,7 +461,7 @@ void CP(SD_info *sd, char *source_filename, char *destination_filename) {
readBlock(sd,source_offset + i, offset + byteNum, numBuffer, 2);
numDataBlock = reconsituteNumber(numBuffer);
numDataBlock = reconstituteNumber(numBuffer);
if (numDataBlock == 0) {
printf("\nLa copie de \"%s\" sous le nom \"%s\" a été créée avec succès.\n", source_filename, destination_filename);
return;
......@@ -496,7 +512,7 @@ int main(int argc, char *argv[]) {
erase(&sd,0,15000);
current_cmd[0] = '\0'; // Initialise la chaîne vide
printf("PicoOrdi>");
//eraseSD(&sd);
while (1) {
_delay_ms(10);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment