Pages: [1]   Go Down
Author Topic: SD lib et date de création des fichiers  (Read 555 times)
0 Members and 1 Guest are viewing this topic.
perpignan, france
Offline Offline
Sr. Member
****
Karma: 2
Posts: 341
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous

en regardant un peu le source de sdfatlib, sur laquelle est basée SD.h, on se rends compte qu'il y a ça dans  sdfat.h :

Code:
/**
   * Set the date/time callback function
   *
   * \param[in] dateTime The user's call back function.  The callback
   * function is of the form:
   *
   * \code
   * void dateTime(uint16_t* date, uint16_t* time) {
   *   uint16_t year;
   *   uint8_t month, day, hour, minute, second;
   *
   *   // User gets date and time from GPS or real-time clock here
   *
   *   // return date using FAT_DATE macro to format fields
   *   *date = FAT_DATE(year, month, day);
   *
   *   // return time using FAT_TIME macro to format fields
   *   *time = FAT_TIME(hour, minute, second);
   * }
   * \endcode
   *
   * Sets the function that is called when a file is created or when
   * a file's directory entry is modified by sync(). All timestamps,
   * access, creation, and modify, are set when a file is created.
   * sync() maintains the last access date and last modify date/time.
   *
   * See the timestamp() function.
   */

logiquement donc, utiliser cette fonction devrait permettre, lorsqu'on a un circuit RTC dans le montage, de dater la création et la modification des fichiers de la carte SD.

J'ai donc essayé dans mon code d'insérer cette fonction, adaptée pour obtenir la date depuis ma puce RTC.

Sauf que dans la lib simplifiée SD.h, on trouve ça :
Code:
class SDClass {
private:
  // These are required for initialisation and use of sdfatlib
  Sd2Card card;
  SdVolume volume;
  SdFile root;

ce qui pose un porblème, vu que pour que la fonction dateTime() fonctionne, il faut la déclarer avec une fonction disponible dans root : root.dateTimeCallback(dateTime); on doit donc avoir accès à "root" depuis le programme, mais comme c'est ici en private,  c'est inaccessible.

j'ai donc essayé de recréer une instance de "root" :

Code:
SdFile root;


void dateTime(uint16_t* date, uint16_t* time) {
    uint16_t year;
    uint8_t month, day, hour, minute, second;

    // User gets date and time from GPS or real-time clock here
    month = RTC.get(DS1307_MTH, 1);
    day = RTC.get(DS1307_DOM,0);
    hour = RTC.get(DS1307_HR,0);
    minute = RTC.get(DS1307_MIN,0);
    second = RTC.get(DS1307_SEC,0);
    // return date using FAT_DATE macro to format fields
    *date = FAT_DATE(year, month, day);

    // return time using FAT_TIME macro to format fields
    *time = FAT_TIME(hour, minute, second);
  }

et j'ai donc dans setup() ce qui suit :
Code:
void setup()
{
  (..........)

 root.dateTimeCallback(dateTime);

 

sauf que ça ne marche pas... ça met bien une date sur les fichier, mais elle est totalement fantaisiste. la question est donc : est-il préférable de passer directement le "root" de SD.h en public, ou y a t'il d'autre moyens plus propres d'accéder à la bonne instance de root ? La programmation objet, j'avoue que je m'y perds un peu... vive le C de base et ses variables globales smiley
« Last Edit: March 23, 2012, 06:37:16 am by bricofoy » Logged

-tu savais que si tu passe le CD de windows à l'envers, tu entends une chanson satanique ?
-non, mais il y a pire : à l'endroit, ça l'instal

Pages: [1]   Go Up
Jump to: