Table of Contents

Devoir 2 - Microbit Busybox

Informations générales

Date limite: 7 Avril, 23:55
Points: 1 point de la note finale
Téléchargement du devoir: Devoir 2

Connaissances évaluées

Règles

  1. Le devoir doit contenir un fichier nommé Readme avec des explications concernant la manière choisie pour résoudre le devoir (-0.1p)
  2. Le devoir doit être implémenté en Python et seulement en utilisant des fonctions MicroPython. Toute autre implémentation conduira à l'annulation du devoir.(0 points)

Utilisez uniquement les bibliothèques MicroPython os et microbit

Copiage

Le devoir est individuel. Toute tentative de copier entraînera 0p pour les devoirs. On utilisera un système automatisé pour détecter le copiage. Si on a des doutes, on va vous adresser des questions supplémentaires concernant le devoir.

Questions

Si vous avez des questions concernant le devoir, posez-les en publiant un issue sur le github https://github.com/UPB-FILS-SdE2/questions avec le format [busybox] <le titre de votre question>

NE PUBLIEZ PAS DE CODE SOURCE. Cela est considéré comme copiage et vous aller recevoir 0p pour le devoir.

Si vous voulez recevoir un e-mail lorsque des problèmes sont signalés ou lorsqu'il y a de nouveaux messages, accédez au site github repository et cliquez sur Watch.

Micro:bit busybox

Pour résoudre le devoir, vous allez réaliser un script de Python qui reçoit comme arguments la commande qu'on désire d'exécuter. L'exécutable va afficher un prompt qui a la forme cmd: , qui va recevra une commande suivie des paramètres. Appuyez sur la touche ENTER pour marquer la fin de la commande. Après chaque commande, le program va afficher le résultat, si c'est le cas, après quoi il attendra une autre commande. Le programme terminera son exécution en recevant la commande exit ou quit.

Exemple:

cmd: ls
test.py my_file my_file2
cmd: echo test
test
cmd: exit

Étant donné que le dispositif Micro: bit n' a pas une structure de répertoire hiérarchique, tous les fichiers seront dans le même répertoire racine où votre application est exécutée.

En ce qui suit, on va définir les commandes supportées par l'utilitaire, ainsi que le comportement caractéristique et les paramètres acceptés. Pour toute autre commande ou pour un format différent, le script va afficher le message Invalid command

Si la commande reçue par l'utilitaire a été exécutée avec succès, il affichera les informations mentionnées dans la description, si c'est le cas. Sinon, un message d'erreur spécifique, mentionné dans la description de la commande, sera affiché. Sauf indication contraire, le message affiché à l'écran sera suivi de NEWLINE et l'invite sera affichée sur la ligne suivante.

Les paramètres de la forme [paramètre] sont facultatifs, et ceux de la forme <paramètre> sont obligatoires.

Les commandes supportées par l'application mini-busybox sont:

Commandes supportées

Ensuite, on va definir les commandes prises en charge par l'utilitaire, ainsi que le comportement caractéristique et les paramètres qu'elles prennent en charge. Pour autre commande ou format, le script affichera le message Invalid command.

Si la commande reçue par l'utilitaire a été exécutée avec succès, il affichera les informations mentionnées dans la description, si c'est le cas. Sinon, un message d'erreur spécifique sera affiché, mentionné dans la description de la commande. Sauf indication contraire, le message affiché à l'écran sera suivi de NEWLINE et le prompt sera affichée sur la ligne suivante.

Les paramètres [paramètre] sont optionnels, et ce qui a la forme <parametre> sont obligatoires

Les ommandes supportées sont:

La commande va afficher les suivantes erreurs pour les suivantes cas:

Exemple
cmd: led on 2 3
cmd: led off 2 3
cmd: led blink 500 30 2 3
Invalid count value.
cmd: led toggle 2 3
cmd: led brightness set 4 2 4
4
cmd: led brightness 2 4
4

La commande affichera les erreurs suivantes dans les cas suivants:

Exemple
cmd: button a
True
cmd: button b
False 
Exemple
cmd: light
100

Pour la conversion des degrés Celsius en Fahrenheit, la formule sera utilisée: F = C * 1.8 + 32.

Exemple
cmd: temperature c
20
cmd: temperature f
68
Exemple
cmd: echo a b c
a b c
cmd: echo -n a b c
a b ccmd: echo my awesome text > my_awesome_file  
Exemple
cmd: cat file1
Text in file1                       
cmd: cat file2
Text in file 2
cmd: cat file1 file2
Text in file1
Text in file 2 
cmd: cat f
Cannot print file.
Exemple
cmd: mv my_file my_file2
cmd: mv f f2
Cannot move file.

En cas d'une autre erreur de suppression sauf Fichier non vide, le message sera affiché: Cannot remove file.

Exemple
cmd: rm my_file1 my_file2
cmd: rm my_file
Cannot remove file. File not empty.
cmd: rm -R my_file
Exemple
cmd: ls
File1
file2
cmd: ls -a
File1
File2
.hidden
cmd: ls -l -a
128 f1
0 f2
20 .f3
Exemple
cmd: cp my_file my_file2
Exemple
cmd: set led_x 2
cmd: set led_y 3
cmd: led on $led_x $led_y

Si une commande n'est pas utilisée conformément à la documentation et que le cas n'est pas traité par les erreurs décrites ci-dessus, le message affiché sera Invalid command.

Exemple

cmd: led 2 3
Invalid command.
cmd: bright
Invalid command.

Règles d'implentation

N'utilisez que des bibliothèques MicroPython os et microbit.

Envoier et tester le devoir

Le devoir sera téléchargé sur Github. Connectez-vous au site et accédez au lien correspondent au devoir.

Le devoir sera automatiquement testé sur Github pour 40 / 100p. Le reste des tests seront exécuté manuellement, à condition que le devoir obtienne au moins 20p des 40p obtenus par des tests automatiques.

Les tests manuels seront effectués en exécutant les commandes suivantes:

$ git clone <your_repository>
$ python3 main.py < input_test.in

Les fichiers d'entrée pour les tests manuels sont disponibles sur github.

Chaque fichier contient le score du test sur la première ligne.