Activator / Deactivator — Fresh USA, Inc.
Windows version 0.2.1 · native Win32 · x86 / x64

ЧТО В АРХИВЕ
bin/Activator-Deactivator-Setup.exe — общий установщик: автоматически
выбирает x86 или x64 и создаёт ярлык в меню «Пуск» → Fresh USA.
bin/x86/Activator-Deactivator.exe — переносимая 32-bit версия.
bin/x64/Activator-Deactivator.exe — переносимая 64-bit версия.
Для запуска EXE не нужны .NET, Python, Basic.dll или отдельный runtime.
Логотип и значок Fresh встроены в EXE. Исходники сохраняйте для обновлений.

СОВМЕСТИМОСТЬ
Windows 7 (рекомендуется SP1), Windows 10: x86 для 32-bit ОС, x64 для 64-bit.
Windows 11: x64 для Intel/AMD. Windows 11 не имеет 32-bit редакции ОС;
приложение x86 также рассчитано на работу через WOW64 в Windows x64.
Windows on ARM и Windows XP/Vista в этот выпуск не входят.
Сборка использует API, доступные Windows 7, и PE minimum subsystem 6.1.
Это техническая целевая совместимость, а не результат испытания всех ОС.
Физический считыватель и интерфейс пока не проверены на реальной Windows.

УСТАНОВКА
Закройте работающий Activator / Deactivator. Запустите Setup.exe и следуйте
инструкциям. Установка выполняется для текущего пользователя в:
%LOCALAPPDATA%\Programs\Fresh USA\Activator-Deactivator
Права администратора приложению и этому установщику не требуются.
Удаление доступно через стандартный список программ Windows.
Вариант без установки: запустите соответствующий EXE из bin/x86 или bin/x64.
При передаче клиенту достаточно Setup.exe либо одного подходящего EXE.
EXE пока не имеет подписи Authenticode; Windows может показать предупреждение
об неизвестном издателе. Подпись для коммерческого распространения отдельная.

СЧИТЫВАТЕЛЬ
Подключите тот же USB-считыватель, который использовали с исходной Reader09.
Он должен появиться как COM-порт в «Диспетчере устройств». Если порт не
появился, нужен драйвер USB/serial производителя, соответствующий вашей
ОС и её архитектуре. Драйвер в установщик не включён. Закройте другие
программы, использующие тот же порт; порт открывается эксклюзивно.

ПОРЯДОК РАБОТЫ
1. Нажмите Refresh, выберите COM-порт, оставьте Reader Address FF.
2. Скорость по умолчанию — 57600bps. Нажмите Connect.
3. После строки Connected введите ровно восемь HEX-символов (0–9, A–F).
4. Если нужно, включите Lock. По умолчанию он выключен.
5. Нажмите Start и подносите метки по очереди.
6. После подтверждённой записи и сверки пароля считывателю отправляется
   исходная команда двойного сигнала. При Lock сигнал отправляется после
   подтверждения Lock. Ошибки индикации отдельно отражаются в журнале.
7. Stop прекращает цикл после текущей операции с меткой. Disconnect или
   закрытие окна также ждут окончания текущей операции; ожидание ответа
   inventory может занять до 30 секунд. Это сохраняет исходные таймауты.

ПОВЕДЕНИЕ КАК В macOS 0.2.1
• Название, логотип, расположение элементов и функции воспроизведены.
  Шрифты, рамки и кнопки оформляет Windows — пиксели системных контролов
  могут отличаться от macOS. Размер окна масштабируется с DPI системы.
• Ввод девятого символа и вставка пароля длиннее восьми знаков отклоняются
  с коротким системным сигналом Windows. Недопустимые HEX-символы тоже.
• Start постоянно опрашивает считыватель в отдельном рабочем потоке.
  Свёрнутое окно не останавливает работу. Компьютер должен оставаться
  включённым и не спать; ручной/системный сон приостанавливает обмен.
• Уже обработанный EPC пропускается, пока метка в поле. Для повторной
  обработки той же метки уберите её из поля минимум на секунду.
• Явный отказ устройства, включая FB, или несовпадение прочитанного
  пароля записываются в журнал; цикл продолжает ждать следующие метки.
  Сигнала успеха для неподтверждённой записи нет.
• Потеря ответа, ошибка CRC/протокола или USB останавливают цикл. Запись
  с неизвестным результатом автоматически не повторяется; переподключитесь.
• Пароль читается обратно перед сигналом и перед Lock.
• Пароль и Lock фиксируются на время цикла. Журнал сохраняется в UTF-8.

ПРОТОКОЛ
Используется Reader09 / исходная Basic.dll: information 21, inventory 01,
Reserved word 2 и word 3 командой 03 с исходной нулевой аутентификацией,
readback 02 с новым паролем, необязательный Lock 06 (Select=1, Protect=2),
двойной сигнал 33 (01 01 02), при Connect — исходный SetBeep(0), команда 35.
Другой формат Reader86 автоматически не подставляется. Эта запись не
является универсальным способом сброса уже защищённого пароля.
Kill и необратимая постоянная блокировка не добавлялись.

ПРОВЕРКИ И ОГРАНИЧЕНИЯ
Пройдены эталонные пакеты Basic.dll, 13 serial-сценариев через POSIX PTY и
14 сценариев фактической ветки _WIN32 с имитацией системного COM API.
Проверены x86/x64 PE, минимальная версия 6.1 и системные DLL-зависимости.
Приложение и NSIS-установщик собраны без предупреждений.
В данной среде запуск Wine блокируется ограничением Unix sockets. Поэтому
нативный интерфейс, звуки, установка и реальное USB-оборудование не испытаны
на Windows 7/10/11. Перед передачей клиентам проверьте каждую нужную ОС.

ПЕРВАЯ ПРИЁМОЧНАЯ ПРОВЕРКА
На Windows сначала проверьте 8 символов и попытку девятого, подключение,
запись/сверку трёх тестовых меток, двойной сигнал, работу при сворачивании,
Stop и Disconnect. Lock отдельно проверьте на тестовой метке. Сохраните
журнал через Save Log и зафиксируйте версию/разрядность Windows.

РАЗРАБОТЧИКУ
src/main.c — нативный Win32 UI, контроль ввода, worker и журнал.
src/reader.c / reader.h — тот же протокол с Win32 и POSIX транспортами.
assets — исходный логотип, ICO, bitmap, manifest.
Build-Windows.cmd — MinGW-w64 x86/x64 и, при наличии, NSIS.
build.sh — сборка обоих EXE и Setup с MinGW-w64 / NSIS на Linux.
installer/setup.nsi — установка для текущего пользователя и удаление.
tests/gui_test.c — native Windows проверка поля и окна, НЕ запускайте во
время реальной работы приложения со считывателем: тест управляет окном.

Локальные тесты разработки:
cc -std=c11 -Wall -Wextra -Werror src/reader.c tests/selftest.c -o reader-test
./reader-test
python3 tests/test_serial.py
cc -D_WIN32 -std=c11 -Wall -Wextra -Werror -I tests/win32_mock src/reader.c tests/test_win32_transport.c -o transport-test
./transport-test
