From ae5a82ec1def904cad057abe22caa87b6a25a526 Mon Sep 17 00:00:00 2001
From: dling <dylan.ling.etu@univ-lille.fr>
Date: Wed, 20 Dec 2023 22:02:25 +0100
Subject: [PATCH] Toutes les commandes fonctionnent
---
SD/picofs.c | 42 +++++++++++++++++++++++-------------------
1 file changed, 23 insertions(+), 19 deletions(-)
diff --git a/SD/picofs.c b/SD/picofs.c
index b774cc8..0878e48 100755
--- a/SD/picofs.c
+++ b/SD/picofs.c
@@ -398,7 +398,6 @@ void CP(SD_info *sd, char *source_filename, char *destination_filename) {
char numBuffer[64];
int destination_offset;
int source_offset;
- int offset;
int numDataBlock;
int newDataBlock;
@@ -440,46 +439,54 @@ void CP(SD_info *sd, char *source_filename, char *destination_filename) {
writeBlock(sd,destination_offset, 0, destination_filename, strlen(destination_filename));
// Copier les blocs de données associés au fichier source dans de nouveaux blocs de données pour le fichier destination
- for (int i = 0; i < MAX_BLOCKS_PER_FILE_DESCRIPTION; i++) {
- if (i == 0) { offset = MAX_FILENAME_LENGTH; }
- else { offset = 0; }
+ //for (int i = 1; i < MAX_BLOCKS_PER_FILE_DESCRIPTION; i++) {
+
// Lecture des numéros de bloc dans les blocs de description
- for (int byteNum=0; byteNum<BLOCK_SIZE; byteNum+=2) {
- readBlock(sd,source_offset + i, offset + byteNum, numBuffer, 2);
+ //for (int byteNum=0; byteNum<BLOCK_SIZE; byteNum+=2) {
+ readBlock(sd,source_offset+1, 0, numBuffer, 2);
- numDataBlock = reconstituteNumber(numBuffer);
+ numDataBlock = reconstituteNumber(numBuffer);
+ //si aucune donnée à copier
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;
}
- for (int chunkStart = 0; chunkStart < BLOCK_SIZE; chunkStart += CHUNK_SIZE) {
+ //for (int chunkStart = 0; chunkStart < BLOCK_SIZE; chunkStart += //CHUNK_SIZE) {
// On stocke le bloc de données associé au fichier source dans descriptionBuffer
- readBlock(sd,numDataBlock, chunkStart, descriptionBuffer, CHUNK_SIZE);
+ readBlock(sd,numDataBlock, 0, descriptionBuffer, CHUNK_SIZE);
+
- if (chunkStart == 0) {
// Trouver un nouveau bloc de données disponible
newDataBlock = findAvailableBlock(sd);
+ char dataBlockNumBuffer[CHUNK_SIZE];
+ readBlock(sd, newDataBlock, 0, dataBlockNumBuffer, CHUNK_SIZE);
+ while (dataBlockNumBuffer[0] != 0)
+ {
+ newDataBlock++;
+ readBlock(sd, newDataBlock, 0, dataBlockNumBuffer, CHUNK_SIZE);
+ }
+
// Mise à jour de la carte de disponibilités
setBlockAvailability(sd,newDataBlock, 1);
// Ecriture du numéro de bloc dans la description du fichier
createNumberBuffer(newDataBlock,numBuffer);
- writeBlock(sd,destination_offset+i, offset+byteNum, numBuffer, 2);
- }
+ writeBlock(sd,destination_offset+1, 0, numBuffer, 2);
+
// Ecriture du bloc de données dans le premier bloc disponible
- writeBlock(sd,newDataBlock, chunkStart, descriptionBuffer, CHUNK_SIZE);
- }
- }
- }
+ writeBlock(sd,newDataBlock, 0, descriptionBuffer, CHUNK_SIZE);
+ printf("\nLa copie de \"%s\" sous le nom \"%s\" a été créée avec succès.\n", source_filename, destination_filename);
+ //}
}
+
int main(int argc, char *argv[]) {
char user_data;
@@ -497,14 +504,11 @@ int main(int argc, char *argv[]) {
printf("Pico ordinateur OK\n\n");
- erase(&sd,0,15000);
current_cmd[0] = '\0'; // Initialise la chaîne vide
printf("PicoOrdi>");
while (1) {
- _delay_ms(10);
-
user_data = get_serial();
if (user_data == '\b'){
--
GitLab