Skip to content

Artemonim/portfolio-mock-RFIDapp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

Проект: RFIDapp — Android-терминал учёта рабочего времени

In English

Краткий обзор

RFIDapp — это Android-приложение, превращающее обычный смартфон в полноценный терминал для учёта рабочего времени. Система использует внешний RFID-считыватель, подключённый через аудиоразъём (mini-jack), для регистрации прихода и ухода сотрудников по картам стандарта EM Marin. Проект разработан с нуля и демонстрирует глубокие знания в области обработки аудиосигналов в реальном времени, архитектуры Android-приложений и современных практик разработки.

Код проекта является закрытым. Название изменено.

Github Langbar симулирован при помощи gh-lang-mock

Технологический стек

  • Язык: Kotlin
  • UI: Jetpack Compose
  • Асинхронность: Kotlin Coroutines
  • Архитектура: MVVM (частично)
  • Основные библиотеки:
    • Android Jetpack (Lifecycle, CameraX)
    • Google Guava
    • kotlinx.serialization
  • Инструменты качества кода: Detekt, Spotless (ktlint), Android Lint, ErrorProne
  • CI/CD: Gradle, PowerShell-скрипт для автоматизации локальных сборок и проверок

Ключевые задачи и решения

  • Создание надёжного и доступного терминала: Основной задачей была разработка программного решения, которое позволило бы использовать стандартные смартфоны в качестве терминалов, значительно снижая затраты на оборудование.
  • Низкоуровневая обработка сигнала: Вместо готовых библиотек был реализован собственный декодер RFID-сигнала на чистом Kotlin. Это потребовало глубокого погружения в цифровую обработку сигналов (DSP) для декодирования Манчестерского кода напрямую из аудиопотока. В качестве основы для алгоритма была взята и кардинально улучшена логика из предыдущей версии приложения заказчика.
  • Обеспечение стабильности: Для повышения точности считывания была разработана система консенсуса, которая подтверждает номер карты только после нескольких успешных последовательных декодирований. Также реализован механизм подавления дубликатов при длительном удержании карты у считывателя.

Архитектурные и технические особенности

  1. Кастомный декодер RFID (Kotlin):

    • Сердце приложения — высокопроизводительный декодер стандарта EM4100, написанный полностью на Kotlin. Он пришёл на смену устаревшему решению, значительно превзойдя его в стабильности.
    • Алгоритм: Захват аудиопотока (PCM 16-bit) → сегментация по уровню сигнала (RMS) → построение упрощённой "сигнальной строки" и RLE-импульсов → поиск стабильной преамбулы → декодирование Манчестерского кода → проверка целостности данных (чётность) → извлечение ID карты.
    • Такой подход позволил реализовать всю логику обработки сигнала нативно в рамках Android-приложения.
  2. Конвейер обработки аудио в реальном времени:

    • AudioProcessor: Отвечает за непрерывный захват аудио с микрофонного входа, применяет программное усиление (gain) и формирует буферы для анализа.
    • AudioSegmenter: Динамически выделяет из потока значимые сегменты с сигналом карты, отсекая тишину и шумы. Это оптимизирует производительность, так как декодер обрабатывает только потенциально полезные данные.
    • Для отладки алгоритмов предусмотрена функция непрерывной записи всей сессии в WAV-файл и экспорт отдельных сегментов.
  3. Современный стек Android-разработки:

    • UI: Интерфейс построен на Jetpack Compose с автопереключением светлой и тёмной темы, указания состояния приложения, индикацию считывания и проблемы с оборудованием.
    • API и разрешения: Приложение корректно работает с последними версиями Android (целевая — Android 14), запрашивает все необходимые разрешения, включая MANAGE_EXTERNAL_STORAGE для Android 11+ и FOREGROUND_SERVICE_MICROPHONE для фоновой работы на Android 14.
    • Файловая система: Реализован собственный менеджер (RFIDappFileSystemManager) для безопасной работы с файлами во внешнем хранилище, организации дебаг (логов, отчётов, аудиодампов) и клиентских данных.
  4. Профессиональный подход к качеству кода и сборке:

    • Автоматизация: Используется PowerShell-скрипт (build.ps1), который автоматизирует весь цикл проверки: форматирование (Spotless/ktlint), статический анализ (Detekt, Android Lint, ErrorProne), запуск unit-тестов и генерацию отчётов о покрытии (JaCoCo). В будущем будет имплементирован в Agent Enforcer.
    • Тестирование: Unit-тесты покрывают ключевую бизнес-логику. Для проверки декодера в том числе используется набор WAV-файлов — записей сигналов карт, что гарантирует защиту от регрессий.
    • Безопасность: Release-сборки проходят минификациию и обфускацию.
  5. R&D-инструментарий (Python Sandbox):

    • Для поддержки разработки и отладки основного алгоритма декодирования была создана отдельная среда (sandbox) со скриптами на Python. Этот инструментарий не является частью Android-приложения, а используется как песочница для ИИ Агента-Разработчика.
    • Возможности: Включает утилиты для визуализации этапов обработки сигнала, сравнительного анализа аудиозаписей с разных устройств, генерации тестовых данных и подбора оптимальных коэффициентов для цифровых фильтров.
    • Такой подход позволил итеративно улучшать ядро декодера, используя Python для быстрых экспериментов, и переносить на Kotlin уже проверенные и отлаженные решения, что значительно ускорило R&D-цикл.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published