This is an old revision of the document!
Cutia vine un cod pin preconfigurat, si anume “0000”.
Utilizatorul poate folosi acest cod pin, sau il poate schimba
introducand secventa “*00*”, dupa care ii se va cere sa introduca
vechiul cod pin, apoi urmatorul cod pin. Daca codul vechi introdus
este gresit actiunea va esua, afisandu-se un mesaj care informeaza
utilizatorul de ce a esuat.
Codul pin poate contine doar cifre, fiind format din 4 cifre.
Butonul '#' poate fi folosit pentru a anula comanda actuala.
Incuietoare cutiei va ramane deschisa cat timp utilizatorul nu inchide capacul. Seriala afiseaza informatii de debug daca este conectata, iar LCD-ul afiseaza toate informatiile de care utilizatorul are nevoie.
Pentru a reseta codul pin, in cazul in care este nevoie, in interiorul cutiei exista un buton marcat cu RESET_CODE. Codul va fi resetat la cel din fabrica.
Codul pin este salvat pe un card microSD. Codul nu este salvat in “clar”, ci se foloseste un hash al lui. Codul propriu zis nu este salvat niciodata, si este folosit doar la citire pentru a calcula hash-ul.
Aplicatia asteapta input de la utilizator, ce poate reprezenta un cod PIN din cifre, un cod special (“*00*”) pentru a schimba codul pin sau apasarea butonului CANCEL ('#') care anuleazaz actiunea curenta si revine in starea initiala de asteptare a input-ului. Daca codul pin este corect, incuietoarea se va deschide, in caz contrar afisandu-se un mesaj de eroare.
O schema block a proiectului se poate regasi la link-ul https://prnt.sc/LOotkVYgrJQO
Schema componentelor este urmatoarea:
Un cod pin este format din 4 cifre. Nu poate contine alte caractere.
Codul pin de fabrica al aplicatiei este “0000”.
Daca codul PIN introdus este are acelasi hash cu cel al codului corect, se va trimite un semnal
care va deschide incuietoarea (invartirea servomotorului). Dupa o perioadata fixa (3 secunde) de timp,
se va verifica daca cutia a fost inchisa (senzorul HALL detecteaza campul magnetic), si va inchide incuietoarea.
Codurile pin nu sunt stocate direct pe card, ci se foloseste o functie de hashing.
Astfel se va stoca valoarea hash-ului respectiva unui cod pin.
Functia de hash a fost verificata inaintea implementarii in arduino si nu
produce coliziuni pentru nicio combinatie posibila de cod pin de intrare.
Parola va fi salvata pe un card microSD, aceasta fiind salvata si dupa decuplarea
sursei de energie. Codul pin poate fi schimbat prin introducerea secventei “*00*”,
dupa care se asteapta codul pin vechi, urmat de introducerea noului codul pin dorit.
Daca codul pin vechi a fost uitat, accesul este imposibil fara forta. Daca cutia este
deschisa, se poate apasa butonul din interior marcat cu reset pentru a reseta codul
pin la cel de fabrica “0000”. Acest buton va genera o intrerupere ce va oprii orice
actiune era in proces.
Pentru a intrerupe actiunile, in intrerupe se modifica o variabla de stare, ce reprezinta
ca actiunea curenta trebuie oprita iar pin-ul resetat.
Pentru a gestiona afisarea la LCD, se va folosi o implementare pe stari. Daca starea device-ului
nu s-a schimbat, atunci nu se mai modifica mesajul(nu resetam lcd-ul degeaba).
Functia Hash a fost testata pentru toate input-urile posibile si nu produce coliziuni, fiind perfecta
pentru ce avem nevoie in aceasta implementare.
Utilizatorul nu poate introduce un cod PIN ce contine altceva inafara de cifre, un mesaj de eroare
fiind afisat in caz contrar.
TBD
TBD
O arhivă (sau mai multe dacă este cazul) cu fişierele obţinute în urma realizării proiectului: surse, scheme, etc. Un fişier README, un ChangeLog, un script de compilare şi copiere automată pe uC crează întotdeauna o impresie bună .
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.