diff --git a/SD/picofs.c b/SD/picofs.c
index 21c41bac92ced51717250d3a95f6053632455b2b..96c91204d03091deac62d655aa56ba036ab95a7e 100644
--- a/SD/picofs.c
+++ b/SD/picofs.c
@@ -23,22 +23,36 @@
#define FIRST_DATA_BLOCK 1040
-void readBlock(SD_info *sd, unsigned int num, int offset, unsigned char *storage, int size) {
+void readBlock(SD_info *sd, unsigned int numBlock, int offset, unsigned char *storage, int size) {
//lire à un endroit spécifique du bloc de la carte SD
- //uint8_t * buffer_storage;
- //readData(sd,num,offset, size, buffer_storage);
- //storage = (unsigned char *)buffer_storage;
-
+ uint8_t * buffer_read = malloc (sizeof(char)*BLOCK_SIZE);
+ readData(sd,numBlock,offset, size, buffer_read);
+ strcpy(storage,(unsigned char *)buffer_read);
+ free(buffer_read);
}
-void writeBlock(SD_info *sd, unsigned int num, int offset, const unsigned char *storage, int size) {
+void writeBlock(SD_info *sd, unsigned int numBlock, int offset, unsigned char *source, int size) {
//écrire à un endroit spécifique du bloc de la carte SD
- // writeBlockSD(sd,num,offset,size, (uint8_t *)storage);
-
+ uint8_t * buffer_write = malloc (sizeof(char)*BLOCK_SIZE); //sauve les données du bloc
+ if(buffer_write == NULL) printf("erreur malloc write");
+ readData(sd, numBlock, 0, size, buffer_write);
+ if(offset + size > 512 )
+ {
+ printf("data to write is too big");
+ return;
+ }
+ for (int i = size - 1; i >= 0; i--) {
+ source[i + offset] = source[i];
+ }
+ // Ajouter les zéros au début de la chaîne
+ for (int j = 0; j < offset; j++) {
+ source[j] = buffer_write[j];
+ }
+ writeBlockSD(sd,numBlock, (uint8_t *)source);
+ free(buffer_write);
}
-
void LS(SD_info *sd) {
unsigned char buffer[MAX_FILENAME_LENGTH];
int fileCount = 0;
@@ -467,106 +481,94 @@ void CP(SD_info *sd, const char *source_filename, const char *destination_filena
int main(int argc, char *argv[]) {
-
- #ifdef TEST_WRITE
- uint8_t blocW[BLOCK_SIZE]={0xaa,0xbb,0xcc};
- #endif
- #ifdef TEST_READ
- uint8_t blocR[BLOCK_SIZE];
- #endif
- #ifdef DEBUG
- init_printf();
- #endif
+
+ char user_data;
SD_info sd;
+ init_printf();
spi_init();
- uint8_t result=sd_init(&sd);
- #ifdef DEBUG
+ uint8_t result = sd_init(&sd);
printf("result=%x\n",result);
printf("status=%x\n",sd.status_);
printf("erreur=%x\n",sd.errorCode_);
printf("type=%x\n",sd.type_);
uint32_t size=cardSize(&sd);
printf("taille=%ld\n",size);
- #endif
- #ifdef TEST_WRITE
- int statutWrite=writeBlockSD(&sd,BLOC_NO,blocW);
- #ifdef DEBUG
- printf("writeStatus=%x\n",statutWrite);
- #endif
- #endif
- #ifdef TEST_READ
- int statutRead=readBlockSD(&sd,BLOC_NO,blocR);
- #ifdef DEBUG
- printf("readstatus=%x\n",statutRead);
- int i;
- for(i=0;i<3;i++) printf("bloc[%d]=%x ",i,blocR[i]);
- printf("\n");
- #endif
- #endif
- return 0;
-
-// // Vérification du nombre d'arguments
-// if (argc < 3) {
-// printf("Usage: %s filesystem_path ACTION [arguments...]\n", argv[0]);
-// printf("Actions:\n");
-// printf(" LS\n");
-// printf(" TYPE filename\n");
-// printf(" CAT filename\n");
-// printf(" RM filename\n");
-// printf(" MV old_filename new_filename\n");
-// printf(" CP filename copy_filename\n");
-//
-// // setBlockAvailability(1040,1);
-// // setBlockAvailability(1041,1);
-// // setBlockAvailability(1042,1);
-// // setBlockAvailability(1043,1);
-// // printf("1er bloc dispo:%d\n",findAvailableBlock());
-// return 1;
-// }
-//
-// // Récupération des arguments
-// const char *filesystem_path = argv[1];
-// const char *action = argv[2];
-//
-// // Exécution de l'action correspondante en fonction des arguments passés
-// if (strcmp(action, "LS") == 0) {
-// LS(filesystem_path);
-// } else if (strcmp(action, "TYPE") == 0) {
-// if (argc < 4) {
-// printf("Usage: %s filesystem_path TYPE filename\n", argv[0]);
-// return 1;
-// }
-// TYPE(filesystem_path, argv[3]);
-// } else if (strcmp(action, "CAT") == 0) {
-// if (argc < 4) {
-// printf("Usage: %s filesystem_path CAT filename\n", argv[0]);
-// return 1;
-// }
-// CAT(filesystem_path, argv[3]);
-// } else if (strcmp(action, "RM") == 0) {
-// if (argc < 4) {
-// printf("Usage: %s filesystem_path RM filename\n", argv[0]);
-// return 1;
-// }
-// RM(filesystem_path, argv[3]);
-// } else if (strcmp(action, "MV") == 0) {
-// if (argc < 5) {
-// printf("Usage: %s filesystem_path MV filename\n", argv[0]);
-// return 1;
-// }
-// MV(filesystem_path, argv[3], argv[4]);
-// } else if (strcmp(action, "CP") == 0) {
-// if (argc < 5) {
-// printf("Usage: %s filesystem_path MV filename\n", argv[0]);
-// return 1;
-// }
-// CP(filesystem_path, argv[3], argv[4]);
-//
-// } else {
-// printf("Action non reconnue. Actions possibles : LS, TYPE, CAT, RM, MV.\n");
-// return 1;
-// }
-
-// return 0;
+
+ LS(&sd);
+ while(1)
+ {
+ _delay_ms(10);
+ user_data = get_serial();
+
+ printf("%c", user_data);
+ /*if(user_data == '\r' )
+ {
+
+ }*/
+
+ }
+ // // Vérification du nombre d'arguments
+ // if (argc < 3) {
+ // printf("Usage: %s filesystem_path ACTION [arguments...]\n", argv[0]);
+ // printf("Actions:\n");
+ // printf(" LS\n");
+ // printf(" TYPE filename\n");
+ // printf(" CAT filename\n");
+ // printf(" RM filename\n");
+ // printf(" MV old_filename new_filename\n");
+ // printf(" CP filename copy_filename\n");
+ //
+ // // setBlockAvailability(1040,1);
+ // // setBlockAvailability(1041,1);
+ // // setBlockAvailability(1042,1);
+ // // setBlockAvailability(1043,1);
+ // // printf("1er bloc dispo:%d\n",findAvailableBlock());
+ // return 1;
+ // }
+ //
+ // // Récupération des arguments
+ // const char *filesystem_path = argv[1];
+ // const char *action = argv[2];
+ //
+ // // Exécution de l'action correspondante en fonction des arguments passés
+ // if (strcmp(action, "LS") == 0) {
+ // LS(filesystem_path);
+ // } else if (strcmp(action, "TYPE") == 0) {
+ // if (argc < 4) {
+ // printf("Usage: %s filesystem_path TYPE filename\n", argv[0]);
+ // return 1;
+ // }
+ // TYPE(filesystem_path, argv[3]);
+ // } else if (strcmp(action, "CAT") == 0) {
+ // if (argc < 4) {
+ // printf("Usage: %s filesystem_path CAT filename\n", argv[0]);
+ // return 1;
+ // }
+ // CAT(filesystem_path, argv[3]);
+ // } else if (strcmp(action, "RM") == 0) {
+ // if (argc < 4) {
+ // printf("Usage: %s filesystem_path RM filename\n", argv[0]);
+ // return 1;
+ // }
+ // RM(filesystem_path, argv[3]);
+ // } else if (strcmp(action, "MV") == 0) {
+ // if (argc < 5) {
+ // printf("Usage: %s filesystem_path MV filename\n", argv[0]);
+ // return 1;
+ // }
+ // MV(filesystem_path, argv[3], argv[4]);
+ // } else if (strcmp(action, "CP") == 0) {
+ // if (argc < 5) {
+ // printf("Usage: %s filesystem_path MV filename\n", argv[0]);
+ // return 1;
+ // }
+ // CP(filesystem_path, argv[3], argv[4]);
+ //
+ // } else {
+ // printf("Action non reconnue. Actions possibles : LS, TYPE, CAT, RM, MV.\n");
+ // return 1;
+ // }
+
+ // return 0;
}