Skip to content

Commit

Permalink
docs: update readme
Browse files Browse the repository at this point in the history
  • Loading branch information
portasynthinca3 committed Jun 15, 2024
1 parent 267775b commit 8c66e58
Showing 1 changed file with 46 additions and 6 deletions.
52 changes: 46 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@
RFID-считыватель [undef.space](https://undef.club)

# Что делает?
Впускает админов в спейс по картам MIFARE. Аутентификация происходит по номеру
карты Тройка или по UID любой другой карты.
- впускает админов в спейс по картам MIFARE;
- сообщает о входе и неудачных попытках входа в админской беседе;
- сообщает о статусе механической задвижки в админской беседе.

# Документация
Устройство состоит из:
Expand All @@ -14,8 +15,7 @@ RFID-считыватель [undef.space](https://undef.club)

## Использование
Поднесите карту к считывателю. Если авторизация прошла успешно, светодиод
загорится зелёным, устройство откроет дверь и зафиксирует факт входа в админской
беседе. Если нет - светодиод загорится красным.
загорится зелёным, а дверь откроется. Если нет - светодиод загорится красным.

## Администрирование
Чтобы использовать встроенный REPL, подключите устройство по USB и откройте
Expand All @@ -39,8 +39,8 @@ Hex-значения прописываются в нижнем регистре
`bracket.scad`.

### Электроника
Подключите NFC-модуль и реле к отладочной плате согласно распиновке в
`main/include/config.h`.
Соберите детектор задвижки согласно схеме в `main/latch.c`. Подключите всё к
отладочной плате согласно распиновке в `main/include/config.h`.

### Прошивка
Написана на C с использованием ESP-IDF. Чтобы собрать прошивку:
Expand All @@ -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 <esp_log.h>`, но `#include "http.h"`;
- ставьте звёздочки в типах слева, например `void* ptr`, а не `void *ptr`;
- ставьте `void` в сигнатуре функции без аргументов, например
`void http_init(void)`,
- разделяйте подключения на секции: внешние и внутренние, например:
```c
#include <driver/rmt_tx.h>
#include <driver/gpio.h>
#include <esp_timer.h>
#include <esp_log.h>

#include "config.h"
#include "latch.h"
#include "http.h"
```

Архитектура:
- инициализируйте оборудование и стейт в `_init` функциях, например
`http_init`;
- циклы задач реализуйте в `_task` функциях, например `http_task`;
- не запускайте задачи в инициализаторах, делайте это в `app_main`;
- старайтесь не использовать глобальные переменные для обмена данными между
файлами - передавайте их через вызовы функций, очереди, буфера и прочие
примитивы синхронизации;
- передавайте данные между задачами через очереди в стиле Erlang - каждая
задача имеет одну входную очередь с определённым форматом сообщений.

0 comments on commit 8c66e58

Please sign in to comment.