Aller au contenu

GO Print

Ajouter une fonction de rename de fichier au firmware Marlin


Messages recommandés

Bonjour à tous, c'est une de mes premières fois où je pose une question sur le forum (eh oui je fais partie de cette majorité qui erre sur les forum en espérant de trouver une réponse plutôt que de poser la question directement) donc j'espère que vous serez indulgent parce que je ne m'y connais pas tellement en Marlin.

Entrons dans le vif du sujet : J'ai une Dagoma DiscoEasy 200 et j'essaye de rajouter une fonction gcode dans le Marlin qui servirait à renommer le fichier qui vient de s'imprimer en "OK + leNomDuFichierDOrigine" de manière à savoir parmi les nombreux fichier dans les dossiers de ma carte SD lesquels j'ai déjà imprimé 🙂 

Alors je sais que je pourrais supprimer le fichier ou les classer plus facilement pour ne pas me perdre ou bien les renommer pour me souvenir du nom de ceux que j'ai déjà imprimé etc...

Mais je trouvais l'option intéressante et j'espère que ça va intéresser certains 🙂 

 

Voilà où j'en suis, je sais comment créer une nouvelle fonction Gcode dans le Main du Marlin :

inline void gcode_M999() { // Fonction existante que j'utilise juste comme référence de position dans le fichier
  Running = true;
  lcd_reset_alert_level();
  // gcode_LastN = Stopped_gcode_LastN;
  FlushSerialRequestResend();
}
        
inline void gcode_M384() // Ma Nouvelle Fonction 

Il faut créer une fonction avec un M*** qui n'est pas utilisé (ici j'ai bien vérifié que le M384 existait pas), je l'ai crée en dessous de la fonction M999 qui était la dernière des M

Et il faut ajouter un case pour le numéro de ma fonction pour savoir que faire quand elle sera appelée

case 999: // M999: Restart after being Stopped
        gcode_M999();
        break;
            
case 384:
	gcode_M384();
     	break;

Ici aussi je me mets en dessous de 999 pour être sur de m'insérer au bon endroit.

Mon seul problème est comment renommer le fichier actuel sélectionné pour l'impression ???

 

Je sais qu'il existe une méthode rename() dans la classe SdBaseFile de Marlin :

bool SdBaseFile::rename(SdBaseFile* dirFile, const char* newPath)

Seulement je ne comprend pas du tout comment elle doit être utilisée ? Est-ce qu'il faut faire leFichierActuel.rename(leFichierActuel, nouveauNom) ? Et surtout je n'arrive pas à comprendre comment récupérer le fichier d'impression actuel... Est-ce qu'il n'y aurait pas une commande du genre getCurrentWorkingFile() ou un truc dans le genre 😅 ?

 

Merci d'avance aux passionnés qui sauront me donner une réponse ou une piste !

Dites moi si je n'ai pas été clair sur un des points ou si vous voulez plus d'info (ce qui est très probable hahaha)

Lien vers le commentaire
Partager sur d’autres sites

Salut !

En farfouillant dans le repo GitHub de Marlin, j'ai trouvé ça:

image.thumb.png.74e92a6ec49febce80aa111ea9d6c7fa.png

https://github.com/MarlinFirmware/Marlin/blob/8dbbcfd382356eb5d16b8bfa75c713bbc1de1631/Marlin/src/sd/SdBaseFile.cpp#L1189 )

Ca nous éclaire au moins sur l'usage de la fonction: leFichierActuel.rename(leRépertoireDeDestination, "nouveauNom")

(Pour l'instant, je n'en sais pas plus sur comment récupérer l'instance du fichier actuel)

Lien vers le commentaire
Partager sur d’autres sites

Ok super ! Donc si je voudrais juste renommer le fichier en le laissant dans le répertoire où il est il faudrait faire : leFichierActuel.rename(sonRepertoireActuel, "OK " + sonNomActuel).

Donc il faut trouver comment récupérer le fichier actuel et comment avoir l'instance d'un répertoire (en l'occurence, celui du fichier actuel si on ne souhaite pas le bouger mais juste le rename)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

l'idée est bonne , mais je pense que si le fichier actuel est en cours d'exécution (comme c'est lui qui envoie la commande pour renommer ), donc "ouvert",  il ne soit pas possible de le renommer .

Donc , une autre piste serait , qu'au moment ou on sélèctionne le fichier à imprimer depuis la carte SD , on le renomme immédiatement (avant lancement) , et on l'exécute déjà renommé.

A+

Lien vers le commentaire
Partager sur d’autres sites

Ah oui pas bête je vois, merci

Ou alors enregistrer l'adresse du fichier en cours et à la fin de chaque impression, fermer le fichier et renommer le fichier qui est à l'adresse que l'on a enregistré

Mais effectivement je pense que le rename quand le fichier est lancé peut être impossible

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...