Table of Contents

Tema 2 - Microbit Busybox

Informații generale

Deadline: 7 Aprilie, ora 23:55
Punctaj: 1 punct din notă
Încărcarea temei: Devoir 2

Cunoștințe evaluate

Reguli

  1. Tema trebuie să conțină un fișier Readme în care să explicați cum ații făcut tema (-0.1p).
  2. Tema trebuie implementată folosind limbajul MicroPython. Orice alte implementări vor duce la anularea temei (0 puncte).

Folosiți doar bibliotecile MicroPython os și microbit.

Copierea

Tema se rezolvă individual. Orice tentativă de copiere va rezulta în 0 puncte pentru tema respectivă. Vom utiliza și sisteme automate de detectare a copierii. Dacă avem dubii, vă vom adresa întrebări suplimentare legate de temă.

Întrebări

Dacă aveți întrebări legate de temă, vă rugăm să scrieți un issue pe repository-ul de github https://github.com/UPB-FILS-SdE2/questions cu titlul de forma [busybox] <titlul întrebări voastre>.

NU PUBLICAȚI COD SURSĂ. Acesta va fi considerată copiere și se va penaliza cu 0 puncte pe temă pentru voi.

Dacă doriți să primiți un email când se pun întrebări noi sau cand apar răspunsuri, accesați github https://github.com/UPB-FILS-SdE2/questions și faceți click pe Watch.

Micro:bit busybox

Scopul acestei teme este implementarea unui utilitar capabil să execute comenzi tip Linux bash.

Pentru rezolvarea temei veți realiza un script Python care citește de la tastatură comenzi pe care le execută. Odată rulat, executabilul va afișa un prompt de forma cmd: urmând să primească o comandă urmată de parametrii. Prin apăsarea tastei ENTER se marchează finalul comenzii. După fiecare comandă, programul va afișa rezultatul, dacă e cazul, după care va aștepta după o altă comandă. Programul își va încheia execuția prin primirea comenzii exit sau quit.

Exemplu:

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

Pentru că plăcuța Micro:bit nu suportă structură ierarhică de directoare, toate fișierele se vor afla în același director rădăcină unde este rulată și aplicația voastră.

Comenzi suportate

În continuare, vom defini comenzile suportate de utilitar, împreună cu comportamentul caracteristic și parametrii pe care acestea le suportă. Pentru orice altă comandă sau orice alt format, scriptul va afișa mesajul Invalid command.

În cazul în care comanda primită de utilitar a fost rulată cu succes, acesta va afișa informația menționată în descriere, dacă e cazul. În caz contrar, se va afișa un mesaj de eroare specific, mentionat în descrierea comenzii. Dacă nu se specifică altfel, mesajul afișat pe ecran va fi urmat de NEWLINE, iar promptul va fi afișat pe linia următoare.

Parametrii de forma [parametru] sunt opționali, iar cei de forma <parametru> sunt obligatorii.

Comenzile suportate de aplicația mini-busybox sunt:

Comanda va afișa următoarele erori pentru următoarele cazuri:

Exemplu:

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

Comanda va afișa următoarele erori pentru următoarele cazuri:

Exemplu:

cmd: button a
True
cmd: button b
False 

Exemplu:

cmd: light
100

Pentru conversia de grade celsius in fahrenheit se va folosi formula: F = C * 1.8 + 32.

Exemplu:

cmd: temperature c
20
cmd: temperature f
68

Exemplu:

cmd: echo a b c
a b c
cmd: echo -n a b c
a b ccmd: echo my awesome text > my_awesome_file   

Exemplu:

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.

Exemplu:

cmd: mv my_file my_file2
cmd: mv f f2
Cannot move file.

În cazul unei alte erori de ștergere exceptând File not empty, se va afișa mesajul: Cannot remove file. Exemplu:

cmd: rm my_file1 my_file2
cmd: rm my_file
Cannot remove file. File not empty.
cmd: rm -R my_file

Exemplu:

cmd: ls
File1
file2
cmd: ls -a
File1
File2
.hidden
cmd: ls -l -a
128 f1
0 f2
20 .f3

Exemplu:

cmd: cp my_file my_file2

Exemplu:

cmd: set led_x 2
cmd: set led_y 3
cmd: led on $led_x $led_y

Dacă o comandă nu este folosită confom documentației și cazul nu este tratat de erorile descrise mai sus, se va afișa mesajul Invalid command.

Exemplu:

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

Reguli de implementare

Folosiți doar bibliotecile MicroPython os și microbit.

Trimiterea și verificarea temei

Tema se va încărca pe Github. Logați-vă pe site și accesați link-ul aferent temei.

Tema va fi testată automat pe Github pentru 40/100p. Restul testelor vor fi rulate manual, cu condiția ca tema să obțină cel puțin 20p din cele 40p obținute prin testare automată.

Testele manuale vor fi efectuare prin rularea următoarelor comenzi:

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

Fișierele de input pentru testele manuale sunt disponibile pe github.

Fiecare fișier conține pe prima linie punctajul testului.