#!/bin/bash
# Vidicap: поиск считывателя RFID-меток (в т.ч. встроенного в моноблок).
# Запуск: sudo bash find-rfid-reader.sh   → отчёт в ./rfid-report-<хост>.txt
# Ubuntu 18.04 (Touch 1.0) и 24.04 (Touch 2.0). Ничего не устанавливает и не меняет.

OUT="rfid-report-$(hostname)-$(date +%Y%m%d-%H%M).txt"
KEYS='rfid|nfc|card|reader|mifare|em-?marine|ironlogic|parsec|sigur|omnikey|acs|acr1|hid global|proximity|smart ?card|125 ?khz|13\.56'

sec() { echo; echo "===== $* ====="; }
{
sec "Система"; uname -a; cat /etc/os-release 2>/dev/null | head -2
sec "Модель компьютера"; cat /sys/class/dmi/id/{sys_vendor,product_name,board_name} 2>/dev/null
sec "USB-устройства (lsusb)"; lsusb 2>/dev/null
sec "Дерево USB (lsusb -t)"; lsusb -t 2>/dev/null
sec "Устройства ввода (/proc/bus/input/devices)"; cat /proc/bus/input/devices
sec "/dev/input/by-id"; ls -l /dev/input/by-id/ 2>/dev/null
sec "Последовательные порты"; ls -l /dev/ttyUSB* /dev/ttyACM* /dev/serial/by-id/ 2>/dev/null
for t in /dev/ttyUSB* /dev/ttyACM*; do [ -e "$t" ] && { echo "--- $t"; udevadm info -q property -n "$t" | grep -E 'ID_VENDOR|ID_MODEL|ID_SERIAL|DRIVER'; }; done
sec "Встроенные COM-порты с устройством"; dmesg 2>/dev/null | grep -iE 'ttyS[0-9]+ at|ttyS[0-9]+: detected' | head
sec "Смарт-карты (PC/SC)"; if command -v pcsc_scan >/dev/null; then timeout 3 pcsc_scan -n 2>&1 | head -20; else echo "pcsc_scan нет (пакет pcsc-tools)"; fi
sec "HID raw"; ls -l /dev/hidraw* 2>/dev/null; for h in /sys/class/hidraw/hidraw*; do [ -e "$h" ] && echo "$(basename $h): $(grep -h HID_NAME $h/device/uevent 2>/dev/null)"; done
sec "Сводка lshw"; command -v lshw >/dev/null && lshw -short 2>/dev/null | grep -iE 'input|bus|communication|generic'
sec "ПОХОЖИЕ НА СЧИТЫВАТЕЛЬ (по названию)"
{ lsusb; grep -h '^N:' /proc/bus/input/devices; ls /dev/serial/by-id/ 2>/dev/null; } | grep -iE "$KEYS" || echo "по названию не найдено: встроенные считыватели часто называются как обычная клавиатура или USB-COM (CH340, CP210x, FTDI, PL2303). Ниже проверка приложением метки."
} > "$OUT" 2>&1

echo "Отчёт об оборудовании: $OUT"
echo
echo "Проверка приложением метки: в течение 15 с приложите метку к считывателю (экрана и мыши не касайтесь)…"
{
sec "ПРОВЕРКА МЕТКОЙ"
PIDS=()
# все клавиатуро-подобные устройства ввода: считыватель-клавиатура пришлёт события
for ev in /dev/input/event*; do
  ( timeout 15 cat "$ev" | head -c 48 | wc -c | grep -qv '^0$' && \
    echo "СОБЫТИЯ: $ev  ($(cat /sys/class/input/$(basename $ev)/device/name 2>/dev/null))" ) &
  PIDS+=($!)
done
# последовательные порты: считыватель-COM пришлёт байты (скорости 9600 и 115200 — самые частые)
for t in /dev/ttyUSB* /dev/ttyACM* /dev/ttyS[0-9]*; do
  [ -e "$t" ] || continue
  stty -F "$t" 9600 raw -echo 2>/dev/null || continue
  ( d=$(timeout 15 head -c 8 "$t" 2>/dev/null | od -An -tx1 | tr -d ' \n'); [ -n "$d" ] && echo "ДАННЫЕ: $t (9600): $d" ) &
  PIDS+=($!)
done
wait "${PIDS[@]}" 2>/dev/null
echo "(если строк СОБЫТИЯ/ДАННЫЕ нет — считыватель не ответил: попробуйте 115200, PC/SC или пришлите отчёт нам)"
} 2>&1 | tee -a "$OUT"
echo
echo "Готово. Пришлите файл $OUT в поддержку Vidicap."
