diff --git a/README.md b/README.md index fc17d0c..7c75d80 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,9 @@ RFID-считыватель [undef.space](https://undef.club) # Что делает? -Впускает админов в спейс по картам MIFARE. Аутентификация происходит по номеру -карты Тройка или по UID любой другой карты. + - впускает админов в спейс по картам MIFARE; + - сообщает о входе и неудачных попытках входа в админской беседе; + - сообщает о статусе механической задвижки в админской беседе. # Документация Устройство состоит из: @@ -14,8 +15,7 @@ RFID-считыватель [undef.space](https://undef.club) ## Использование Поднесите карту к считывателю. Если авторизация прошла успешно, светодиод -загорится зелёным, устройство откроет дверь и зафиксирует факт входа в админской -беседе. Если нет - светодиод загорится красным. +загорится зелёным, а дверь откроется. Если нет - светодиод загорится красным. ## Администрирование Чтобы использовать встроенный REPL, подключите устройство по USB и откройте @@ -39,8 +39,8 @@ Hex-значения прописываются в нижнем регистре `bracket.scad`. ### Электроника -Подключите NFC-модуль и реле к отладочной плате согласно распиновке в -`main/include/config.h`. +Соберите детектор задвижки согласно схеме в `main/latch.c`. Подключите всё к +отладочной плате согласно распиновке в `main/include/config.h`. ### Прошивка Написана на C с использованием ESP-IDF. Чтобы собрать прошивку: @@ -66,3 +66,43 @@ Hex-значения прописываются в нижнем регистре - соберите проект и загрузите прошивку: - в самый первый раз: `idf.py build flash monitor` - в последующие разы, в т.ч. для уже собранного устройства: `./flash.sh` + +#### Стиль кода +Форматирование: + - отступы: 4 пробела; + - используйте `SCREAMING_SNAKE_CASE` для макросов, `snake_case` для всего + остального; + - названия символов и типов начинайте с названия файла, например `http_init` + в `http.c`; + - названия статических символов начинайте с нижнего подчёркивания, например + `_http_urlencode` в `http.c`; + - названия типов завершайте на `_t`, например `http_message_t` в `http.c`; + - не ставьте пробел между ключевым словом и скобкой, а открывающуюся фигурную + скобку ставьте на той же строке, например `if(condition) {`; + - подключайте внешние файлы в угловых скобках, а файлы проекта - в кавычках, + например `#include `, но `#include "http.h"`; + - ставьте звёздочки в типах слева, например `void* ptr`, а не `void *ptr`; + - ставьте `void` в сигнатуре функции без аргументов, например + `void http_init(void)`, + - разделяйте подключения на секции: внешние и внутренние, например: + ```c + #include + #include + #include + #include + + #include "config.h" + #include "latch.h" + #include "http.h" + ``` + +Архитектура: + - инициализируйте оборудование и стейт в `_init` функциях, например + `http_init`; + - циклы задач реализуйте в `_task` функциях, например `http_task`; + - не запускайте задачи в инициализаторах, делайте это в `app_main`; + - старайтесь не использовать глобальные переменные для обмена данными между + файлами - передавайте их через вызовы функций, очереди, буфера и прочие + примитивы синхронизации; + - передавайте данные между задачами через очереди в стиле Erlang - каждая + задача имеет одну входную очередь с определённым форматом сообщений.